Changeset View
Changeset View
Standalone View
Standalone View
source/network/scripting/JSInterface_Network.cpp
Show All 24 Lines | |||||
#include "lobby/IXmppClient.h" | #include "lobby/IXmppClient.h" | ||||
#include "network/NetClient.h" | #include "network/NetClient.h" | ||||
#include "network/NetMessage.h" | #include "network/NetMessage.h" | ||||
#include "network/NetServer.h" | #include "network/NetServer.h" | ||||
#include "network/StunClient.h" | #include "network/StunClient.h" | ||||
#include "ps/CLogger.h" | #include "ps/CLogger.h" | ||||
#include "ps/Game.h" | #include "ps/Game.h" | ||||
#include "scriptinterface/ScriptInterface.h" | #include "scriptinterface/ScriptInterface.h" | ||||
#include "scriptinterface/FunctionWrapper.h" | |||||
u16 JSI_Network::GetDefaultPort(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | u16 JSI_Network::GetDefaultPort() | ||||
{ | { | ||||
return PS_DEFAULT_PORT; | return PS_DEFAULT_PORT; | ||||
} | } | ||||
bool JSI_Network::HasNetServer(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | bool JSI_Network::HasNetServer() | ||||
{ | { | ||||
return g_NetServer; | return g_NetServer; | ||||
} | } | ||||
bool JSI_Network::HasNetClient(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | bool JSI_Network::HasNetClient() | ||||
{ | { | ||||
return g_NetClient; | return g_NetClient; | ||||
} | } | ||||
JS::Value JSI_Network::FindStunEndpoint(ScriptInterface::CxPrivate* pCxPrivate, int port) | JS::Value JSI_Network::FindStunEndpoint(ScriptInterface::CxPrivate* pCxPrivate, int port) | ||||
{ | { | ||||
return StunClient::FindStunEndpointHost(*(pCxPrivate->pScriptInterface), port); | return StunClient::FindStunEndpointHost(*(pCxPrivate->pScriptInterface), port); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 74 Lines • ▼ Show 20 Lines | void JSI_Network::StartNetworkJoin(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& playerName, const CStr& serverAddress, u16 serverPort, bool useSTUN, const CStr& hostJID) | ||||
if (!g_NetClient->SetupConnection(serverAddress, serverPort, enetClient)) | if (!g_NetClient->SetupConnection(serverAddress, serverPort, enetClient)) | ||||
{ | { | ||||
pCxPrivate->pScriptInterface->ReportError("Failed to connect to server"); | pCxPrivate->pScriptInterface->ReportError("Failed to connect to server"); | ||||
SAFE_DELETE(g_NetClient); | SAFE_DELETE(g_NetClient); | ||||
SAFE_DELETE(g_Game); | SAFE_DELETE(g_Game); | ||||
} | } | ||||
} | } | ||||
void JSI_Network::DisconnectNetworkGame(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | void JSI_Network::DisconnectNetworkGame() | ||||
{ | { | ||||
// TODO: we ought to do async reliable disconnections | // TODO: we ought to do async reliable disconnections | ||||
SAFE_DELETE(g_NetServer); | SAFE_DELETE(g_NetServer); | ||||
SAFE_DELETE(g_NetClient); | SAFE_DELETE(g_NetClient); | ||||
SAFE_DELETE(g_Game); | SAFE_DELETE(g_Game); | ||||
} | } | ||||
CStr JSI_Network::GetPlayerGUID(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | CStr JSI_Network::GetPlayerGUID() | ||||
{ | { | ||||
if (!g_NetClient) | if (!g_NetClient) | ||||
return "local"; | return "local"; | ||||
return g_NetClient->GetGUID(); | return g_NetClient->GetGUID(); | ||||
} | } | ||||
JS::Value JSI_Network::PollNetworkClient(ScriptInterface::CxPrivate* pCxPrivate) | JS::Value JSI_Network::PollNetworkClient(ScriptInterface::CxPrivate* pCxPrivate) | ||||
Show All 16 Lines | void JSI_Network::SetNetworkGameAttributes(ScriptInterface::CxPrivate* pCxPrivate, JS::HandleValue attribs1) | ||||
// TODO: This is a workaround because we need to pass a MutableHandle to a JSAPI functions somewhere (with no obvious reason). | // TODO: This is a workaround because we need to pass a MutableHandle to a JSAPI functions somewhere (with no obvious reason). | ||||
JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); | JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); | ||||
JSAutoRequest rq(cx); | JSAutoRequest rq(cx); | ||||
JS::RootedValue attribs(cx, attribs1); | JS::RootedValue attribs(cx, attribs1); | ||||
g_NetClient->SendGameSetupMessage(&attribs, *(pCxPrivate->pScriptInterface)); | g_NetClient->SendGameSetupMessage(&attribs, *(pCxPrivate->pScriptInterface)); | ||||
} | } | ||||
void JSI_Network::AssignNetworkPlayer(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), int playerID, const CStr& guid) | void JSI_Network::AssignNetworkPlayer(int playerID, const CStr& guid) | ||||
{ | { | ||||
ENSURE(g_NetClient); | ENSURE(g_NetClient); | ||||
g_NetClient->SendAssignPlayerMessage(playerID, guid); | g_NetClient->SendAssignPlayerMessage(playerID, guid); | ||||
} | } | ||||
void JSI_Network::KickPlayer(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const CStrW& playerName, bool ban) | void JSI_Network::KickPlayer(const CStrW& playerName, bool ban) | ||||
{ | { | ||||
ENSURE(g_NetClient); | ENSURE(g_NetClient); | ||||
g_NetClient->SendKickPlayerMessage(playerName, ban); | g_NetClient->SendKickPlayerMessage(playerName, ban); | ||||
} | } | ||||
void JSI_Network::SendNetworkChat(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const CStrW& message) | void JSI_Network::SendNetworkChat(const CStrW& message) | ||||
{ | { | ||||
ENSURE(g_NetClient); | ENSURE(g_NetClient); | ||||
g_NetClient->SendChatMessage(message); | g_NetClient->SendChatMessage(message); | ||||
} | } | ||||
void JSI_Network::SendNetworkReady(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), int message) | void JSI_Network::SendNetworkReady(int message) | ||||
{ | { | ||||
ENSURE(g_NetClient); | ENSURE(g_NetClient); | ||||
g_NetClient->SendReadyMessage(message); | g_NetClient->SendReadyMessage(message); | ||||
} | } | ||||
void JSI_Network::ClearAllPlayerReady (ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | void JSI_Network::ClearAllPlayerReady () | ||||
{ | { | ||||
ENSURE(g_NetClient); | ENSURE(g_NetClient); | ||||
g_NetClient->SendClearAllReadyMessage(); | g_NetClient->SendClearAllReadyMessage(); | ||||
} | } | ||||
void JSI_Network::StartNetworkGame(ScriptInterface::CxPrivate* UNUSED(pCxPrivate)) | void JSI_Network::StartNetworkGame() | ||||
{ | { | ||||
ENSURE(g_NetClient); | ENSURE(g_NetClient); | ||||
g_NetClient->SendStartGameMessage(); | g_NetClient->SendStartGameMessage(); | ||||
} | } | ||||
void JSI_Network::SetTurnLength(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), int length) | void JSI_Network::SetTurnLength(int length) | ||||
{ | { | ||||
if (g_NetServer) | if (g_NetServer) | ||||
g_NetServer->SetTurnLength(length); | g_NetServer->SetTurnLength(length); | ||||
else | else | ||||
LOGERROR("Only network host can change turn length"); | LOGERROR("Only network host can change turn length"); | ||||
} | } | ||||
void JSI_Network::RegisterScriptFunctions(const ScriptInterface& scriptInterface) | void JSI_Network::RegisterScriptFunctions(const ScriptInterface& scriptInterface) | ||||
{ | { | ||||
scriptInterface.RegisterFunction<u16, &GetDefaultPort>("GetDefaultPort"); | #define Register(name) ScriptWrapper::WrapAndRegister<decltype(&name), &name>(scriptInterface, #name) | ||||
scriptInterface.RegisterFunction<bool, &HasNetServer>("HasNetServer"); | Register(GetDefaultPort); | ||||
scriptInterface.RegisterFunction<bool, &HasNetClient>("HasNetClient"); | Register(HasNetServer); | ||||
scriptInterface.RegisterFunction<JS::Value, int, &FindStunEndpoint>("FindStunEndpoint"); | Register(HasNetClient); | ||||
scriptInterface.RegisterFunction<void, CStrW, u16, CStr, &StartNetworkHost>("StartNetworkHost"); | Register(FindStunEndpoint); | ||||
scriptInterface.RegisterFunction<void, CStrW, CStr, u16, bool, CStr, &StartNetworkJoin>("StartNetworkJoin"); | Register(StartNetworkHost); | ||||
scriptInterface.RegisterFunction<void, &DisconnectNetworkGame>("DisconnectNetworkGame"); | Register(StartNetworkJoin); | ||||
scriptInterface.RegisterFunction<CStr, &GetPlayerGUID>("GetPlayerGUID"); | Register(DisconnectNetworkGame); | ||||
scriptInterface.RegisterFunction<JS::Value, &PollNetworkClient>("PollNetworkClient"); | Register(GetPlayerGUID); | ||||
scriptInterface.RegisterFunction<void, JS::HandleValue, &SetNetworkGameAttributes>("SetNetworkGameAttributes"); | Register(PollNetworkClient); | ||||
scriptInterface.RegisterFunction<void, int, CStr, &AssignNetworkPlayer>("AssignNetworkPlayer"); | Register(SetNetworkGameAttributes); | ||||
scriptInterface.RegisterFunction<void, CStrW, bool, &KickPlayer>("KickPlayer"); | Register(AssignNetworkPlayer); | ||||
scriptInterface.RegisterFunction<void, CStrW, &SendNetworkChat>("SendNetworkChat"); | Register(KickPlayer); | ||||
scriptInterface.RegisterFunction<void, int, &SendNetworkReady>("SendNetworkReady"); | Register(SendNetworkChat); | ||||
scriptInterface.RegisterFunction<void, &ClearAllPlayerReady>("ClearAllPlayerReady"); | Register(SendNetworkReady); | ||||
scriptInterface.RegisterFunction<void, &StartNetworkGame>("StartNetworkGame"); | Register(ClearAllPlayerReady); | ||||
scriptInterface.RegisterFunction<void, int, &SetTurnLength>("SetTurnLength"); | Register(StartNetworkGame); | ||||
Register(SetTurnLength); | |||||
#undef Register | |||||
} | } |
Wildfire Games · Phabricator