mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-08-03 04:19:20 -04:00
481 lines
17 KiB
C++
Executable File
481 lines
17 KiB
C++
Executable File
//-----------------------------------------------------------------------
|
|
// ScriptMethodsServerUI.cpp
|
|
// Copyright 2002, Sony Online Entertainment Inc., all rights reserved.
|
|
//-----------------------------------------------------------------------
|
|
|
|
#include "serverScript/FirstServerScript.h"
|
|
#include "serverScript/JavaLibrary.h"
|
|
|
|
#include "serverGame/Client.h"
|
|
#include "serverGame/CreatureObject.h"
|
|
#include "serverGame/ServerObject.h"
|
|
#include "serverGame/ServerUIManager.h"
|
|
#include "serverGame/ServerUIPage.h"
|
|
#include "sharedGame/SuiPageData.h"
|
|
|
|
#include "sharedUtility/ValueDictionary.h"
|
|
|
|
// ======================================================================
|
|
// ScriptMethodsServerUINamespace
|
|
// ======================================================================
|
|
|
|
namespace ScriptMethodsServerUINamespace
|
|
{
|
|
bool install();
|
|
|
|
jint JNICALL createSuiPage (JNIEnv *env, jobject self, jstring pageName, jlong owner, jlong client);
|
|
jboolean JNICALL clearSuiDataSource (JNIEnv *env, jobject self, jint pageId, jstring dataSource);
|
|
jboolean JNICALL clearSuiDataSourceContainer(JNIEnv *env, jobject self, jint pageId, jstring dataSource);
|
|
jboolean JNICALL addSuiDataItem (JNIEnv *env, jobject self, jint pageId, jstring dataSource, jstring dataItemValue);
|
|
jboolean JNICALL addSuiDataSourceContainer (JNIEnv *env, jobject self, jint pageId, jstring dataSource, jstring dataItemValue);
|
|
jboolean JNICALL addSuiDataSource (JNIEnv *env, jobject self, jint pageId, jstring dataSource, jstring dataItemValue);
|
|
jboolean JNICALL addSuiChildWidget (JNIEnv *env, jobject self, jint pageId, jstring widgetType, jstring widgetName, jstring partentWidgetName);
|
|
jboolean JNICALL setSuiProperty (JNIEnv *env, jobject self, jint pageId, jstring widgetName, jstring propertyName, jstring propertyValue);
|
|
jboolean JNICALL subscribeToSuiEvent (JNIEnv *env, jobject self, jint pageId, jint eventType, jstring widgetName, jstring callback);
|
|
jboolean JNICALL subscribeToSuiPropertyForEvent (JNIEnv *env, jobject self, jint pageId, jint eventType, jstring eventWidgetName, jstring propertyWidgetName, jstring propertyName);
|
|
jboolean JNICALL showSuiPage (JNIEnv *env, jobject self, jint pageId);
|
|
jboolean JNICALL forceCloseSuiPage (JNIEnv *env, jobject self, jint pageId);
|
|
jboolean JNICALL setSuiAssociatedObject (JNIEnv *env, jobject self, jint pageId, jlong j_associatedObjectId);
|
|
jboolean JNICALL setSuiAssociatedLocation (JNIEnv *env, jobject self, jint pageId, jlong j_associatedObjectId);
|
|
jboolean JNICALL setSuiMaxRangeToObject (JNIEnv *env, jobject self, jint pageId, jfloat j_maxRange);
|
|
jboolean JNICALL clientMinigameOpen(JNIEnv *env, jobject self, jlong player, jobject data);
|
|
jboolean JNICALL clientMinigameClose(JNIEnv *env, jobject self, jlong player, jobject data);
|
|
|
|
}
|
|
|
|
|
|
//========================================================================
|
|
// install
|
|
//========================================================================
|
|
|
|
bool ScriptMethodsServerUINamespace::install()
|
|
{
|
|
const JNINativeMethod NATIVES[] = {
|
|
#define JF(a,b,c) {a,b,(void*)(ScriptMethodsServerUINamespace::c)}
|
|
JF("_createSUIPage", "(Ljava/lang/String;JJ)I", createSuiPage),
|
|
JF("clearSUIDataSource", "(ILjava/lang/String;)Z", clearSuiDataSource),
|
|
JF("clearSUIDataSourceContainer", "(ILjava/lang/String;)Z", clearSuiDataSourceContainer),
|
|
JF("addSUIDataItem", "(ILjava/lang/String;Ljava/lang/String;)Z", addSuiDataItem),
|
|
JF("addSUIDataSourceContainer", "(ILjava/lang/String;Ljava/lang/String;)Z", addSuiDataSourceContainer),
|
|
JF("addSUIDataSource", "(ILjava/lang/String;Ljava/lang/String;)Z", addSuiDataSource),
|
|
JF("addSUIChildWidget", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z", addSuiChildWidget),
|
|
JF("setSUIProperty", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z", setSuiProperty),
|
|
JF("subscribeToSUIEvent", "(IILjava/lang/String;Ljava/lang/String;)Z", subscribeToSuiEvent),
|
|
JF("subscribeToSUIPropertyForEvent", "(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z", subscribeToSuiPropertyForEvent),
|
|
JF("showSUIPage", "(I)Z", showSuiPage),
|
|
JF("forceCloseSUIPage", "(I)Z", forceCloseSuiPage),
|
|
JF("_setSUIAssociatedObject", "(IJ)Z", setSuiAssociatedObject),
|
|
JF("_setSUIAssociatedLocation", "(IJ)Z", setSuiAssociatedLocation),
|
|
JF("setSUIMaxRangeToObject", "(IF)Z", setSuiMaxRangeToObject),
|
|
JF("_clientMinigameOpen", "(JLscript/dictionary;)Z", clientMinigameOpen),
|
|
JF("_clientMinigameClose", "(JLscript/dictionary;)Z", clientMinigameClose),
|
|
|
|
};
|
|
|
|
return JavaLibrary::registerNatives(NATIVES, sizeof(NATIVES)/sizeof(NATIVES[0]));
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jint JNICALL ScriptMethodsServerUINamespace::createSuiPage(JNIEnv *env, jobject self, jstring pageName, jlong ownerobject, jlong client)
|
|
{
|
|
JavaStringParam localPageName(pageName);
|
|
|
|
jint failureCode = -1;
|
|
ServerObject* owner = nullptr;
|
|
if(!JavaLibrary::getObject(ownerobject, owner))
|
|
{
|
|
WARNING(true, ("SUI: couldn't get owner ServerObject*, can't create a page"));
|
|
return failureCode;
|
|
}
|
|
|
|
ServerObject* so = nullptr;
|
|
if(!JavaLibrary::getObject(client, so))
|
|
return failureCode;
|
|
|
|
std::string pn;
|
|
JavaLibrary::convert(localPageName, pn);
|
|
|
|
//Still going to check for client even though we don't use it anymore -- ARH
|
|
Client* const c = so->getClient();
|
|
if(!c)
|
|
{
|
|
WARNING(true, ("SUI: couldn't get Client object [%s], can't create a page [%s]",
|
|
so->getDebugInformation(false).c_str(), pn.c_str()));
|
|
return failureCode;
|
|
}
|
|
|
|
//make a serverui page for the given client
|
|
int const pId = ServerUIManager::createPage(pn, *owner, so->getNetworkId());
|
|
//fail if can't create page
|
|
if(pId == -1)
|
|
{
|
|
WARNING(true, ("SUI: ServerManager::createPage could not create a SUI page"));
|
|
return failureCode;
|
|
}
|
|
return pId;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::clearSuiDataSource(JNIEnv *env, jobject self, jint pageId, jstring dataSource)
|
|
{
|
|
JavaStringParam localDataSource(dataSource);
|
|
|
|
ServerUIPage * const p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("SUI: Could not find page %d, cannot clear datasource", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
std::string ds;
|
|
JavaLibrary::convert(localDataSource, ds);
|
|
|
|
p->clearDataSource(ds);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::clearSuiDataSourceContainer(JNIEnv * env, jobject self, jint pageId, jstring dataSourceContainer)
|
|
{
|
|
JavaStringParam localDataSource(dataSourceContainer);
|
|
|
|
ServerUIPage * const p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("SUI: Could not find page %d, cannot clear datasource", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
std::string ds;
|
|
JavaLibrary::convert(localDataSource, ds);
|
|
|
|
p->clearDataSourceContainer(ds);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::addSuiDataItem(JNIEnv *env, jobject self, jint pageId, jstring dataSource, jstring dataItemValue)
|
|
{
|
|
JavaStringParam localDataSource(dataSource);
|
|
JavaStringParam localDataItemValue(dataItemValue);
|
|
|
|
ServerUIPage* p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("SUI: Could not find page %d, cannot add the item", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
std::string ds;
|
|
JavaLibrary::convert(localDataSource, ds);
|
|
|
|
Unicode::String div;
|
|
JavaLibrary::convert(localDataItemValue, div);
|
|
|
|
std::string din = "Name";
|
|
p->addDataItem(ds, din, div);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::addSuiDataSourceContainer(JNIEnv *env, jobject self, jint pageId, jstring dataSource, jstring dataItemValue)
|
|
{
|
|
JavaStringParam localDataSource(dataSource);
|
|
JavaStringParam localDataItemValue(dataItemValue);
|
|
|
|
ServerUIPage* p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("SUI: Could not find page %d, cannot add the item", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
std::string ds;
|
|
JavaLibrary::convert(localDataSource, ds);
|
|
|
|
Unicode::String div;
|
|
JavaLibrary::convert(localDataItemValue, div);
|
|
|
|
std::string din = "Name";
|
|
p->addDataSourceContainer(ds, din, div);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::addSuiDataSource(JNIEnv *env, jobject self, jint pageId, jstring dataSource, jstring dataItemValue)
|
|
{
|
|
JavaStringParam localDataSource(dataSource);
|
|
JavaStringParam localDataItemValue(dataItemValue);
|
|
|
|
ServerUIPage* p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("SUI: Could not find page %d, cannot add the item", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
std::string ds;
|
|
JavaLibrary::convert(localDataSource, ds);
|
|
|
|
Unicode::String div;
|
|
JavaLibrary::convert(localDataItemValue, div);
|
|
|
|
std::string din = "Name";
|
|
p->addDataSource(ds, din, div);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::addSuiChildWidget(JNIEnv *env, jobject self, jint pageId, jstring widgetType, jstring widgetName, jstring parentWidgetName)
|
|
{
|
|
JavaStringParam localWidgetType(widgetType);
|
|
JavaStringParam localWidgetName(widgetName);
|
|
JavaStringParam localParentWidgetName(parentWidgetName);
|
|
|
|
ServerUIPage* p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("SUI: Could not find page %d, cannot add a child widget", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
std::string wt;
|
|
JavaLibrary::convert(localWidgetType, wt);
|
|
std::string wn;
|
|
JavaLibrary::convert(localWidgetName, wn);
|
|
std::string pwn;
|
|
JavaLibrary::convert(localParentWidgetName, pwn);
|
|
|
|
p->addChildWidget(wt, wn, pwn);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::setSuiProperty(JNIEnv *env, jobject self, jint pageId, jstring widgetName, jstring propertyName, jstring propertyValue)
|
|
{
|
|
JavaStringParam localWidgetName(widgetName);
|
|
JavaStringParam localPropertyName(propertyName);
|
|
JavaStringParam localPropertyValue(propertyValue);
|
|
|
|
ServerUIPage* p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("SUI: Could not find page %d, cannot set the property", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
std::string wn;
|
|
JavaLibrary::convert(localWidgetName, wn);
|
|
std::string pn;
|
|
JavaLibrary::convert(localPropertyName, pn);
|
|
Unicode::String pv;
|
|
JavaLibrary::convert(localPropertyValue, pv);
|
|
|
|
p->setProperty(wn, pn, pv);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::subscribeToSuiEvent(JNIEnv *env, jobject self, jint pageId, jint eventType, jstring eventWidgetName, jstring callback)
|
|
{
|
|
ServerUIPage* p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("SUI: Could not find page %d, cannot subscribe to the property", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
std::string ewn;
|
|
if (eventWidgetName != nullptr)
|
|
{
|
|
JavaStringParam localEventWidgetName(eventWidgetName);
|
|
JavaLibrary::convert(localEventWidgetName, ewn);
|
|
}
|
|
|
|
JavaStringParam localCallback(callback);
|
|
|
|
std::string cb;
|
|
JavaLibrary::convert(localCallback, cb);
|
|
|
|
p->getPageData().subscribeToEvent(eventType, ewn, cb);
|
|
return JNI_TRUE;
|
|
}
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::subscribeToSuiPropertyForEvent(JNIEnv *env, jobject self, jint pageId, jint eventType, jstring eventWidgetName, jstring propertyWidgetName, jstring propertyName)
|
|
{
|
|
|
|
ServerUIPage* p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("SUI: Could not find page %d, cannot subscribe to the property", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
std::string ewn;
|
|
if (eventWidgetName != nullptr)
|
|
{
|
|
JavaStringParam localEventWidgetName(eventWidgetName);
|
|
JavaLibrary::convert(localEventWidgetName, ewn);
|
|
}
|
|
|
|
JavaStringParam localPropertyWidgetName(propertyWidgetName);
|
|
JavaStringParam localPropertyName(propertyName);
|
|
|
|
std::string pwn;
|
|
JavaLibrary::convert(localPropertyWidgetName, pwn);
|
|
|
|
std::string pn;
|
|
JavaLibrary::convert(localPropertyName, pn);
|
|
|
|
p->getPageData().subscribeToPropertyForEvent(eventType, ewn, pwn, pn);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::showSuiPage(JNIEnv *env, jobject self, jint pageId)
|
|
{
|
|
if (ServerUIManager::showPage(pageId))
|
|
return JNI_TRUE;
|
|
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::forceCloseSuiPage(JNIEnv *env, jobject self, jint pageId)
|
|
{
|
|
bool result = ServerUIManager::closePage(pageId);
|
|
if(result)
|
|
return JNI_TRUE;
|
|
else
|
|
{
|
|
DEBUG_WARNING(true, ("SUI: Couldn't force close the page", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::setSuiAssociatedObject(JNIEnv *env, jobject self, jint pageId, jlong j_associatedObjectId)
|
|
{
|
|
ServerUIPage * const p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("Could not find page %d, cannot set property", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
if (!j_associatedObjectId)
|
|
{
|
|
DEBUG_WARNING(true, ("bad associatedObjectId sent to setAssociatedObject", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
NetworkId id(j_associatedObjectId);
|
|
if (id == NetworkId::cms_invalid)
|
|
{
|
|
DEBUG_WARNING(true, ("could not convert associatedObjectid", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
p->setAssociatedObjectId (id);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::setSuiAssociatedLocation(JNIEnv *env, jobject self, jint pageId, jlong j_associatedObjectId)
|
|
{
|
|
ServerUIPage * const p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("Could not find page %d, cannot set property", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
if (!j_associatedObjectId)
|
|
{
|
|
DEBUG_WARNING(true, ("bad associatedObjectId sent to setAssociatedObject"));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
ServerObject* associatedObject = nullptr;
|
|
if(!JavaLibrary::getObject(j_associatedObjectId, associatedObject))
|
|
{
|
|
DEBUG_WARNING(true, ("could not find object for associatedObjectid"));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
p->setAssociatedLocation (associatedObject->findPosition_w());
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::setSuiMaxRangeToObject(JNIEnv *env, jobject self, jint pageId, jfloat j_maxRange)
|
|
{
|
|
ServerUIPage * const p = ServerUIManager::getPage(pageId);
|
|
if(!p)
|
|
{
|
|
DEBUG_WARNING(true, ("Could not find page %d, cannot set property", pageId));
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
p->setMaxRangeFromObject (j_maxRange);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::clientMinigameOpen(JNIEnv *env, jobject self, jlong player, jobject data)
|
|
{
|
|
ServerObject* playerServerObject = nullptr;
|
|
if(!JavaLibrary::getObject(player, playerServerObject))
|
|
return JNI_FALSE;
|
|
|
|
CreatureObject * creatureObject = playerServerObject->asCreatureObject();
|
|
if(creatureObject != nullptr)
|
|
{
|
|
ValueDictionary gameData;
|
|
JavaLibrary::convert(data, gameData);
|
|
|
|
creatureObject->clientMinigameOpen(gameData);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
return JNI_FALSE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
jboolean JNICALL ScriptMethodsServerUINamespace::clientMinigameClose(JNIEnv *env, jobject self, jlong player, jobject data)
|
|
{
|
|
ServerObject* playerServerObject = nullptr;
|
|
if(!JavaLibrary::getObject(player, playerServerObject))
|
|
return JNI_FALSE;
|
|
|
|
CreatureObject * creatureObject = playerServerObject->asCreatureObject();
|
|
if(creatureObject != nullptr)
|
|
{
|
|
ValueDictionary gameData;
|
|
JavaLibrary::convert(data, gameData);
|
|
|
|
creatureObject->clientMinigameClose(gameData);
|
|
return JNI_TRUE;
|
|
}
|
|
|
|
return JNI_FALSE;
|
|
}
|