// Filename: PPInstance.h // Created by: atrestman (14Sept09) // //////////////////////////////////////////////////////////////////// // // PANDA 3D SOFTWARE // Copyright (c) Carnegie Mellon University. All rights reserved. // // All use of this software is subject to the terms of the revised BSD // license. You should have received a copy of this license along // with this source code in a file named "LICENSE." // //////////////////////////////////////////////////////////////////// #pragma once #include #include #include #include "afxmt.h" #include "p3d_plugin.h" #include "PPDownloadCallback.h" #include "PPLogger.h" #include "fileSpec.h" #include "load_plugin.h" #define WM_PY_LAUNCHED (WM_USER + 1) #define WM_PROGRESS (WM_USER + 2) #define WM_PANDA_NOTIFICATION (WM_USER + 3) class CP3DActiveXCtrl; class PPInstance { public: PPInstance( CP3DActiveXCtrl& parentCtrl ); virtual ~PPInstance( ); int DownloadP3DComponents( std::string& p3dDllFilename ); int LoadPlugin( const std::string& dllFilename ); int UnloadPlugin( void ); static void ref_plugin(); static void unref_plugin(); int Start( const std::string& p3dFileName ); int Stop( ); std::string GetHostUrl( ); std::string GetP3DFilename( ); static void HandleRequestLoop(); inline bool IsInit() { return m_isInit; } HWND m_parentWnd; CEvent m_eventStop; CEvent m_eventDownloadStopped; P3D_object* m_p3dObject; protected: PPInstance( ); PPInstance( const PPInstance& ); int DownloadFile( const std::string& from, const std::string& to ); int CopyFile( const std::string& from, const std::string& to ); bool read_contents_file(const std::string &contents_filename, bool fresh_download); void find_host(TiXmlElement *xcontents); void read_xhost(TiXmlElement *xhost); void add_mirror(std::string mirror_url); void choose_random_mirrors(std::vector &result, int num_mirrors); bool HandleRequest( P3D_request *request ); static void HandleRequestGetUrl( void *data ); void set_failed(); P3D_instance* m_p3dInstance; CP3DActiveXCtrl& m_parentCtrl; PPLogger m_logger; bool m_handleRequestOnUIThread; bool m_isInit; bool m_pluginLoaded; std::string _download_url_prefix; typedef std::vector Mirrors; Mirrors _mirrors; FileSpec _core_api_dll; time_t _contents_expiration; bool _failed; std::string m_rootDir; };