genesis-3d_engine/Engine/players/Demo/DemoPublish_WinWebInterface.cc
zhongdaohuan 6e8fbca745 genesis-3d engine version 1.3.
match the genesis editor version 1.3.0.653.
2014-05-05 14:50:33 +08:00

245 lines
5.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "stdneb.h"
#include "system/appentry.h"
#include "foundation/memory/memory.h"
#include "DemoPublish_GameApplication.h"
#include "WebJetWebData.h"
#include "foundation/io/advFileService/advFileService.h"
#include "addons/fileservice/libwfs/src/lfs_util.h"
#include "WJPluginPacketFactoryManager.h"
#include "WJPacketRecevier.h"
#include "PageExportFunction.h"
#include "WJCallFuncProxy.h"
#include "LogFile.h"
using namespace DemoPublish;
using namespace WebJet;
#define DLLEXP extern "C" __declspec(dllexport)
#define HANDLE_API(r,n,p) DLLEXP r n p;
#include "WinWebInterface.h"
static DemoPublishGameApplication* g_App = NULL;
static PacketRecevier* g_pRec = NULL;
//CRITICAL_SECTION g_RecvCS;
int g_nLevel0FileTaskID = - 1 ;
WebJetWebData g_WebData ;
bool g_bUseFS = false ;
bool g_bAllOpenned = false ;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------
//插件调用引擎层的函数实现
bool CallFuncProxy::CallEngineMethod( const char* sMethodName,const char* sGUID,const FuncParamList& argList )
{
FuncParamList resList;
assert(sMethodName);
//调用Toggle方法,带有一个传入参数,无返回值
if (strcmp("Toggle",sMethodName)==0)
{
FuncParameter arg0;
//获取传入参数
if(!argList.GetParam(&arg0,0))
{
assert(0 && "if(!argList.GetParam(&arg0,0))");
}
unsigned int iNum = arg0.GetTypeValue<unsigned int>();
Demo::Toggle(iNum);
}
//调用GetCameraPos返回相机位置,没有传入参数带有3个float返回值
else if (strcmp("GetCameraPos",sMethodName)==0)
{
float x,y,z;
//GetCamerPos返回一个含有3个float值的字符串需要解析出来
sscanf(Demo::GetCarmerPos(),"%f %f %f",&x,&y,&z);
FuncParameter fx(x),fy(y),fz(z);
resList.Push(fx);
resList.Push(fy);
resList.Push(fz);
}
else if (strcmp("LoadLogic",sMethodName)==0)
{
assert(argList.size());
Demo::LoadLogic(argList[0].GetTypeValue<std::string>().c_str());
}
if(!CallFuncProxy::Instance()->CallFromEngine(g_pRec,sMethodName,sGUID,resList))
{
assert(0 && "if(!CallFuncProxy::Instance()->CallFromEngine(g_pRec,sMethodName,resList))");
}
return true;
}
static CLogFile g_LogFile;
void OpenAll()
{
///
char sLogName[256];
sprintf(sLogName,"%s%s",g_WebData.sHomeDir,"\\EngineLog.txt");
OpenLog(sLogName,false);
LogMsg("\n\n============================================================================================");
g_App = new DemoPublishGameApplication() ;
assert(g_App) ;
if(!g_App)
return ;
WebJetWebData* pData = &g_WebData ;
//g_App = n_new(WebSimpleGameApplication);
g_App->SetCompanyName("Radon Labs GmbH");
g_App->SetAppTitle("Test Game");
//g_App.SetCmdLineArgs(args);
//g_App.GetGraphicsFeature()->SetWebVersion(false,hWnd);
g_App->SetWebVersion(true,pData->hWnd);
g_App->SetResourceBaseDir(pData->sHomeDir);
g_App->SetResDownloadUrl(pData->sResUrlBase);
g_App->SetSceneName(pData->sSceneName);
g_App->SetPipeName(pData->sPacketPipeName);
g_App->SetGameResolution(pData->uGameWidth,pData->uGameHeight);
g_App->Open();
PluginPacketFactoryManager::Instance()->registerAllFactory();
//InitializeCriticalSection(&g_RecvCS);
g_pRec = new PacketRecevier(g_App->GetPipeName(),PluginPacketFactoryManager::Instance());
assert(g_pRec);
g_pRec->Start();
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void WinWebInit(WebJetWebData* pData)
{
if(!pData)
{
assert(0 && "pData is NULL in WinWebInit");
return;
}
g_WebData = *pData ;
Util::String fsCfg = "-id=xxyz -file_server=\"http://127.0.0.1/files\" -disk_cache=\"C:\\WebJetPluginInstall\\FileService\\Cache\"" ;
g_bUseFS = false ;
if( 1 && "Just for demo." )
{
FILE* pF = fopen( "fscfg.ini" , "r" ) ;
if( pF )
{
char bf[1024] ;
fgets( bf , 1024 , pF ) ;
if( strlen( bf ) > 0 )
{
if( strncmp( bf , "-id" , 3 ) == 0 )
{
g_bUseFS = true ;
fsCfg = bf ;
}
}
fclose( pF ) ;
}
}
if( g_bUseFS )
{
//wFileService::setFileServiceLocation( "C:\\WebJetPluginInstall\\FileService" ) ;
/// Create file service .
//IO::AdvFileServiceSystem::Create() ;
//IO::AdvFileServiceSystem::Instance()->Setup( fsCfg ) ;
/// Download level 0 files .
//g_nLevel0FileTaskID = IO::AdvFileServiceSystem::Instance()->UpdateFileByLevel( 0 , 0 ) ;
}
}
//////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
void WinWebUpdate()
{
if( g_bUseFS )
{
if( !g_bAllOpenned )
{
//int stt = IO::AdvFileServiceSystem::Instance()->GetTaskState( g_nLevel0FileTaskID ) ;
//if( stt == IO::AdvFileServiceSystem::Succeed || stt == IO::AdvFileServiceSystem::Failed )
{
OpenAll() ;
g_bAllOpenned = true ;
}
}
}
else
{
if( !g_bAllOpenned )
{
OpenAll() ;
g_bAllOpenned = true ;
}
}
if( !g_bAllOpenned )
return ;
g_App->Run();
//EnterCriticalSection(&g_RecvCS);
if(g_pRec)
g_pRec->Update();
//LeaveCriticalSection(&g_RecvCS);
}
//////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
void WinWebCleanup()
{
if(g_pRec)
{
g_pRec->Terminate();
delete g_pRec;
}
if (g_App)
{
g_App->End();
/*g_App->Close();*/
n_delete(g_App);
g_App = NULL;
}
//DeleteCriticalSection(&g_RecvCS);
//n_delete(g_pRec);
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
LRESULT WinWebInputMsg(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (g_App)
{
return g_App->GetInputWindowsSource()->OnWinProc(hWnd,uMsg,wParam,lParam);
}
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
}