mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-07-15 00:08:07 -04:00
110 lines
3.8 KiB
C++
110 lines
3.8 KiB
C++
// ======================================================================
|
|
//
|
|
// ScriptMethodsNotification.cpp
|
|
// Copyright 2003, Sony Online Entertainment, Inc.
|
|
// All rights reserved.
|
|
//
|
|
// ======================================================================
|
|
|
|
#include "serverScript/FirstServerScript.h"
|
|
#include "serverScript/JavaLibrary.h"
|
|
|
|
#include "serverGame/CreatureObject.h"
|
|
#include "sharedRandom/Random.h"
|
|
#include "sharedNetworkMessages/ClientNotificationBoxMessage.h"
|
|
|
|
#include "UnicodeUtils.h"
|
|
|
|
using namespace JNIWrappersNamespace;
|
|
|
|
|
|
// ======================================================================
|
|
|
|
namespace ScriptMethodsNotificationNamespace
|
|
{
|
|
bool install();
|
|
|
|
jint JNICALL addNotification(JNIEnv *env, jobject self, jlong player, jstring contents, jboolean useNotificationIcon, jint iconStyle, jfloat timeout, jint channel, jstring sound);
|
|
void JNICALL cancelNotification(JNIEnv *env, jobject self, jlong player, jint notification);
|
|
void JNICALL cancelAllNotifications(JNIEnv *env, jobject self, jlong player);
|
|
}
|
|
|
|
using namespace ScriptMethodsNotificationNamespace;
|
|
|
|
//========================================================================
|
|
// install
|
|
//========================================================================
|
|
|
|
bool ScriptMethodsNotificationNamespace::install()
|
|
{
|
|
const JNINativeMethod NATIVES[] = {
|
|
#define JF(a,b,c) {a,b,(void*)(ScriptMethodsNotificationNamespace::c)}
|
|
JF("_addNotification", "(JLjava/lang/String;ZIFILjava/lang/String;)I", addNotification),
|
|
JF("_cancelNotification", "(JI)V", cancelNotification),
|
|
JF("_cancelAllNotifications", "(J)V", cancelAllNotifications),
|
|
};
|
|
|
|
return JavaLibrary::registerNatives(NATIVES, sizeof(NATIVES)/sizeof(NATIVES[0]));
|
|
}
|
|
|
|
|
|
// ======================================================================
|
|
|
|
jint JNICALL ScriptMethodsNotificationNamespace::addNotification(JNIEnv *env, jobject self, jlong player, jstring contents, jboolean useNotificationIcon, jint iconStyle, jfloat timeout, jint channel, jstring sound)
|
|
{
|
|
CreatureObject const * playerObject = NULL;
|
|
if (!JavaLibrary::getObject(player, playerObject))
|
|
return 0;
|
|
|
|
JavaStringParam localContents(contents);
|
|
Unicode::String localContentsString;
|
|
JavaLibrary::convert(localContents, localContentsString);
|
|
if (localContentsString.empty())
|
|
return 0;
|
|
|
|
JavaStringParam localSoundContents(sound);
|
|
std::string localSoundContentsString;
|
|
JavaLibrary::convert(localSoundContents, localSoundContentsString);
|
|
|
|
int sequenceId = static_cast<int>(Random::random());
|
|
ClientNotificationBoxMessage cnbm(sequenceId, playerObject->getNetworkId(), localContentsString, useNotificationIcon, iconStyle, timeout, channel, localSoundContentsString);
|
|
|
|
if(playerObject->getClient())
|
|
{
|
|
playerObject->getClient()->send(cnbm, true);
|
|
return sequenceId;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void JNICALL ScriptMethodsNotificationNamespace::cancelNotification(JNIEnv *env, jobject self, jlong player, jint notification)
|
|
{
|
|
CreatureObject const * playerObject = NULL;
|
|
if (!JavaLibrary::getObject(player, playerObject))
|
|
return;
|
|
ClientNotificationBoxMessage cnbm(notification, playerObject->getNetworkId(), Unicode::emptyString, FALSE, 0, 0.0f, ClientNotificationBoxMessage::NC_SPECIAL_CANCEL, std::string(""));
|
|
|
|
if(playerObject->getClient())
|
|
{
|
|
playerObject->getClient()->send(cnbm, true);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
|
|
void JNICALL ScriptMethodsNotificationNamespace::cancelAllNotifications(JNIEnv *env, jobject self, jlong player)
|
|
{
|
|
CreatureObject const * playerObject = NULL;
|
|
if (!JavaLibrary::getObject(player, playerObject))
|
|
return;
|
|
ClientNotificationBoxMessage cnbm(0, playerObject->getNetworkId(), Unicode::emptyString, FALSE, 0, 0.0f, ClientNotificationBoxMessage::NC_SPECIAL_CANCEL_ALL, std::string(""));
|
|
|
|
if(playerObject->getClient())
|
|
{
|
|
playerObject->getClient()->send(cnbm, true);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
|