open_toontown_panda3d/direct/src/plugin_activex/PPInstance.h

99 lines
2.5 KiB
C++

// 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 <string>
#include <vector>
#include <math.h>
#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<std::string> &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<std::string> Mirrors;
Mirrors _mirrors;
FileSpec _core_api_dll;
time_t _contents_expiration;
bool _failed;
std::string m_rootDir;
};