624 lines
14 KiB
C++
624 lines
14 KiB
C++
|
#include "android_api.h"
|
|||
|
|
|||
|
#include "main_code.h"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#include <iostream>
|
|||
|
|
|||
|
#include "boost/asio.hpp"
|
|||
|
#include "boost/bind.hpp"
|
|||
|
#include "boost/shared_ptr.hpp"
|
|||
|
#include "boost/shared_array.hpp"
|
|||
|
#include "boost/array.hpp"
|
|||
|
#include "boost/enable_shared_from_this.hpp"
|
|||
|
#include "boost/thread.hpp"
|
|||
|
|
|||
|
#include <cstdlib>
|
|||
|
#include <cstring>
|
|||
|
#include <iostream>
|
|||
|
|
|||
|
#include "ClientSocket.h"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
boost::asio::io_service IoService;
|
|||
|
|
|||
|
boost::thread IoServiceThread;
|
|||
|
|
|||
|
boost::shared_ptr<TClientSocket> ClientSocket;
|
|||
|
|
|||
|
boost::mutex connection_mutex;
|
|||
|
|
|||
|
std::vector<std::string> MessageHeaderArr;
|
|||
|
std::vector<std::string> MessageTextArr;
|
|||
|
|
|||
|
std::vector<std::string> JavaStringHolder;
|
|||
|
|
|||
|
boost::shared_ptr<boost::asio::deadline_timer> HeartbeatTimer;
|
|||
|
boost::shared_ptr<boost::asio::deadline_timer> MapHeartbeatTimer;
|
|||
|
|
|||
|
std::vector<TUserInfo> UserInfoMapArr;
|
|||
|
std::vector<TUserInfo> UserInfoAlarmMapArr;
|
|||
|
|
|||
|
std::vector<TUserInfo>* CurrentUserInfoMapArr = &UserInfoMapArr;
|
|||
|
|
|||
|
float LastPosX = 0.f;
|
|||
|
float LastPosY = 0.f;
|
|||
|
|
|||
|
int MapType = 0;
|
|||
|
|
|||
|
/*
|
|||
|
void WriteToFile(std::string text)
|
|||
|
{
|
|||
|
std::string LogFilename = "/sdcard/hello.txt";
|
|||
|
|
|||
|
FILE* f = fopen(LogFilename.c_str(), "a");
|
|||
|
|
|||
|
if (f != NULL)
|
|||
|
{
|
|||
|
fputs(text.c_str(), f);
|
|||
|
fflush(f);
|
|||
|
fclose(f);
|
|||
|
}
|
|||
|
}*/
|
|||
|
|
|||
|
void IoServiceRun()
|
|||
|
{
|
|||
|
IoService.run();
|
|||
|
|
|||
|
ClientSocket = boost::shared_ptr<TClientSocket>();
|
|||
|
|
|||
|
IoService.reset();
|
|||
|
|
|||
|
//WriteToFile("lolwaauat\n");
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
void OnAutorizationSent()
|
|||
|
{
|
|||
|
//WriteToFile("OnAutorizationSent\n");
|
|||
|
|
|||
|
RestartHeartbeatTimer();
|
|||
|
RestartMapHeartbeatTimer();
|
|||
|
|
|||
|
connection_mutex.unlock();
|
|||
|
}
|
|||
|
|
|||
|
void OnRecieveMapUpdate(std::vector<TUserInfo> userInfoArr)
|
|||
|
{
|
|||
|
UserInfoMapArr = userInfoArr;
|
|||
|
}
|
|||
|
|
|||
|
void OnRecieveAlarmMapUpdate(std::vector<TUserInfo> userInfoArr)
|
|||
|
{
|
|||
|
UserInfoAlarmMapArr = userInfoArr;
|
|||
|
}
|
|||
|
|
|||
|
void OnClosed()
|
|||
|
{
|
|||
|
//WriteToFile("OnClosed\n");
|
|||
|
}
|
|||
|
|
|||
|
JavaVM* JavaVirtualMachine;
|
|||
|
|
|||
|
template<typename T>
|
|||
|
inline std::string tostr(T i)
|
|||
|
{
|
|||
|
std::ostringstream out;
|
|||
|
out << i;
|
|||
|
return std::string(out.str());
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
JNIEnv* jenv;
|
|||
|
|
|||
|
jclass clazzLUSCore;
|
|||
|
|
|||
|
struct OnReceiveMessage
|
|||
|
{
|
|||
|
void operator()(TUserInfo userInfo, std::string message)
|
|||
|
{
|
|||
|
|
|||
|
JNIEnv* j_env;
|
|||
|
JavaVirtualMachine->GetEnv((void**)&j_env, JNI_VERSION_1_4);
|
|||
|
|
|||
|
std::string header = tostr<int>(userInfo.Uik) + " " + message;
|
|||
|
|
|||
|
std::string status;
|
|||
|
|
|||
|
if (userInfo.Status == 0)
|
|||
|
{
|
|||
|
status = "Наблюдатель";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
status = "Мобильная группа";
|
|||
|
}
|
|||
|
|
|||
|
std::string text = userInfo.LastName
|
|||
|
+ " " + userInfo.FirstName
|
|||
|
+ " " + userInfo.MiddleName
|
|||
|
+ " " + userInfo.PhoneNumber
|
|||
|
+ " " + status
|
|||
|
+ " УИК №" + tostr<int>(userInfo.Uik)
|
|||
|
+ ": " + message;
|
|||
|
|
|||
|
|
|||
|
{
|
|||
|
boost::this_thread::disable_interruption di;
|
|||
|
|
|||
|
MessageHeaderArr.push_back(header);
|
|||
|
MessageTextArr.push_back(text);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
void OnHeartbeat(const boost::system::error_code& e)
|
|||
|
{
|
|||
|
|
|||
|
if (e)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
/*
|
|||
|
float posX = MainWindowPtr->GetUi()->PosXSpinBox->value();
|
|||
|
float posY = MainWindowPtr->GetUi()->PosYSpinBox->value();
|
|||
|
|
|||
|
int uik = MainWindowPtr->GetUi()->UikSpinBox->value();
|
|||
|
int status = MainWindowPtr->GetUi()->StatusComboBox->currentIndex();
|
|||
|
int mapState = MainWindowPtr->GetUi()->MapStateComboBox->currentIndex() + 1;
|
|||
|
if (status == 1)
|
|||
|
{
|
|||
|
mapState = 0;
|
|||
|
}
|
|||
|
|
|||
|
ClientSocket->UserInfo.Uik = uik;
|
|||
|
ClientSocket->UserInfo.MapState = mapState;
|
|||
|
|
|||
|
ClientSocket->UserInfo.PosX = posX;
|
|||
|
ClientSocket->UserInfo.PosY = posY;
|
|||
|
*/
|
|||
|
ClientSocket->SendHeartbeatThreaded();
|
|||
|
|
|||
|
RestartHeartbeatTimer();
|
|||
|
}
|
|||
|
|
|||
|
void OnMapHeartbeat(const boost::system::error_code& e)
|
|||
|
{
|
|||
|
if (e)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if (MapType == 0)
|
|||
|
{
|
|||
|
ClientSocket->SendMapQueryThreaded();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ClientSocket->SendAlarmMapQueryThreaded();
|
|||
|
}
|
|||
|
|
|||
|
RestartMapHeartbeatTimer();
|
|||
|
}
|
|||
|
|
|||
|
void RestartHeartbeatTimer()
|
|||
|
{
|
|||
|
HeartbeatTimer = boost::shared_ptr<boost::asio::deadline_timer>(new boost::asio::deadline_timer(IoService, boost::posix_time::seconds(3)));
|
|||
|
|
|||
|
HeartbeatTimer->async_wait(boost::bind(&OnHeartbeat, boost::asio::placeholders::error));
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void RestartMapHeartbeatTimer()
|
|||
|
{
|
|||
|
MapHeartbeatTimer = boost::shared_ptr<boost::asio::deadline_timer>(new boost::asio::deadline_timer(IoService, boost::posix_time::seconds(3)));
|
|||
|
|
|||
|
MapHeartbeatTimer->async_wait(boost::bind(&OnMapHeartbeat, boost::asio::placeholders::error));
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
JNIEXPORT void JNICALL Java_fishrungames_kobserver_JniWrapper_Open(JNIEnv * env, jobject obj, jstring addr, jstring port)
|
|||
|
{
|
|||
|
|
|||
|
int JVMResult;
|
|||
|
JVMResult = env->GetJavaVM(&JavaVirtualMachine);
|
|||
|
|
|||
|
jenv = env;
|
|||
|
|
|||
|
static bool x = false;
|
|||
|
|
|||
|
if (!x)
|
|||
|
{
|
|||
|
x = true;
|
|||
|
|
|||
|
std::string LogFilename = "/sdcard/hello.txt";
|
|||
|
|
|||
|
FILE* f = fopen(LogFilename.c_str(), "w");
|
|||
|
|
|||
|
if (f != NULL)
|
|||
|
{
|
|||
|
fclose(f);
|
|||
|
}
|
|||
|
}
|
|||
|
const char *addr_c;
|
|||
|
|
|||
|
addr_c = env->GetStringUTFChars(addr, NULL);
|
|||
|
if (addr_c == NULL)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
const char *port_c;
|
|||
|
|
|||
|
port_c = env->GetStringUTFChars(port, NULL);
|
|||
|
if (port_c == NULL)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
//WriteToFile("Thread go xxx\n");
|
|||
|
|
|||
|
|
|||
|
connection_mutex.lock();
|
|||
|
|
|||
|
ClientSocket = boost::shared_ptr<TClientSocket>(new TClientSocket(IoService));
|
|||
|
|
|||
|
ClientSocket->UserInfo.PosX = LastPosX;
|
|||
|
ClientSocket->UserInfo.PosY = LastPosY;
|
|||
|
|
|||
|
ClientSocket->ReceiveAutorizationSentSignal.connect(boost::bind(&OnAutorizationSent));
|
|||
|
|
|||
|
ClientSocket->ReceiveForceCloseSignal.connect(boost::bind(&OnClosed));
|
|||
|
|
|||
|
ClientSocket->ReceiveMessageSignal.connect(OnReceiveMessage());
|
|||
|
|
|||
|
|
|||
|
|
|||
|
ClientSocket->ReceiveMapSignal.connect(boost::bind(&OnRecieveMapUpdate, _1));
|
|||
|
ClientSocket->ReceiveAlarmMapSignal.connect(boost::bind(&OnRecieveAlarmMapUpdate, _1));
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
ClientSocket->Open(std::string(addr_c), std::string(port_c));
|
|||
|
|
|||
|
IoServiceThread = boost::thread(boost::bind(&IoServiceRun));
|
|||
|
|
|||
|
//WriteToFile("Thread go\n");
|
|||
|
|
|||
|
|
|||
|
connection_mutex.lock();
|
|||
|
connection_mutex.unlock();
|
|||
|
|
|||
|
//WriteToFile("Sleep over\n");
|
|||
|
|
|||
|
jclass cls = env->FindClass("fishrungames/kobserver/JniWrapper");
|
|||
|
jmethodID mid = env->GetStaticMethodID(cls, "OnConnectSuccessful", "()V");
|
|||
|
|
|||
|
clazzLUSCore = (_jclass*)env->NewGlobalRef(cls);
|
|||
|
|
|||
|
env->DeleteLocalRef(cls);
|
|||
|
|
|||
|
|
|||
|
if (mid == NULL)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
env->CallStaticVoidMethod(cls, mid);
|
|||
|
|
|||
|
|
|||
|
env->ReleaseStringUTFChars(addr, addr_c);
|
|||
|
env->ReleaseStringUTFChars(port, port_c);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT void JNICALL Java_fishrungames_kobserver_JniWrapper_Close(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
ClientSocket->CloseThreaded();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
JNIEXPORT void JNICALL Java_fishrungames_kobserver_JniWrapper_UpdateUserInfo(JNIEnv * env, jobject obj
|
|||
|
, jstring lastName
|
|||
|
, jstring firstName
|
|||
|
, jstring middleName
|
|||
|
, jstring contactNumber
|
|||
|
, int mapState
|
|||
|
, int uik
|
|||
|
, int status
|
|||
|
, float posX
|
|||
|
, float posY)
|
|||
|
{
|
|||
|
TUserInfo userInfo;
|
|||
|
|
|||
|
const char *c_lastName;
|
|||
|
|
|||
|
c_lastName = env->GetStringUTFChars(lastName, NULL);
|
|||
|
|
|||
|
if (c_lastName == NULL)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
userInfo.LastName = std::string(c_lastName);
|
|||
|
|
|||
|
env->ReleaseStringUTFChars(lastName, c_lastName);
|
|||
|
|
|||
|
|
|||
|
// ==== First Name
|
|||
|
const char *c_firstName;
|
|||
|
|
|||
|
c_firstName = env->GetStringUTFChars(firstName, NULL);
|
|||
|
|
|||
|
if (c_firstName == NULL)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
userInfo.FirstName = std::string(c_firstName);
|
|||
|
|
|||
|
env->ReleaseStringUTFChars(firstName, c_firstName);
|
|||
|
|
|||
|
|
|||
|
// ==== Middle Name
|
|||
|
const char *c_middleName;
|
|||
|
|
|||
|
c_middleName = env->GetStringUTFChars(middleName, NULL);
|
|||
|
|
|||
|
if (c_middleName == NULL)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
userInfo.MiddleName = std::string(c_middleName);
|
|||
|
|
|||
|
env->ReleaseStringUTFChars(middleName, c_middleName);
|
|||
|
|
|||
|
|
|||
|
// ==== Contact Number
|
|||
|
const char *c_contactNumber;
|
|||
|
|
|||
|
c_contactNumber = env->GetStringUTFChars(contactNumber, NULL);
|
|||
|
|
|||
|
if (c_contactNumber == NULL)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
userInfo.PhoneNumber = std::string(c_contactNumber);
|
|||
|
|
|||
|
env->ReleaseStringUTFChars(contactNumber, c_contactNumber);
|
|||
|
|
|||
|
userInfo.MapState = mapState;
|
|||
|
userInfo.Uik = uik;
|
|||
|
userInfo.Status = status;
|
|||
|
|
|||
|
userInfo.PosX = posX;
|
|||
|
|
|||
|
userInfo.PosY = posY;
|
|||
|
|
|||
|
ClientSocket->UserInfo = userInfo;
|
|||
|
|
|||
|
ClientSocket->SendUserinfoUpdateThreaded();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
JNIEXPORT void JNICALL Java_fishrungames_kobserver_JniWrapper_SetAlarmCommon(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
ClientSocket->UserInfo.MapState = 2;
|
|||
|
ClientSocket->SendUserinfoUpdateThreaded();
|
|||
|
ClientSocket->SendMessageThreaded(std::string("ТРЕВОГА (АВТОМАТИЧЕСКОЕ СООБЩЕНИЕ)"));
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT void JNICALL Java_fishrungames_kobserver_JniWrapper_SetAlarmExclusion(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
ClientSocket->UserInfo.MapState = 3;
|
|||
|
ClientSocket->SendUserinfoUpdateThreaded();
|
|||
|
ClientSocket->SendMessageThreaded(std::string("ТРЕВОГА: УДАЛЕНИЕ С УИК (АВТОМАТИЧЕСКОЕ СООБЩЕНИЕ)"));
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT void JNICALL Java_fishrungames_kobserver_JniWrapper_SetAlarmInjection(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
ClientSocket->UserInfo.MapState = 4;
|
|||
|
ClientSocket->SendUserinfoUpdateThreaded();
|
|||
|
ClientSocket->SendMessageThreaded(std::string("ТРЕВОГА: ВБРОС (АВТОМАТИЧЕСКОЕ СООБЩЕНИЕ)"));
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT void JNICALL Java_fishrungames_kobserver_JniWrapper_SetAlarmCarousel(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
ClientSocket->UserInfo.MapState = 5;
|
|||
|
ClientSocket->SendUserinfoUpdateThreaded();
|
|||
|
ClientSocket->SendMessageThreaded(std::string("ТРЕВОГА: КАРУСЕЛЬ (АВТОМАТИЧЕСКОЕ СООБЩЕНИЕ)"));
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT void JNICALL Java_fishrungames_kobserver_JniWrapper_SetAlarmAssault(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
ClientSocket->UserInfo.MapState = 6;
|
|||
|
ClientSocket->SendUserinfoUpdateThreaded();
|
|||
|
ClientSocket->SendMessageThreaded(std::string("ТРЕВОГА: НАПАДЕНИЕ (АВТОМАТИЧЕСКОЕ СООБЩЕНИЕ)"));
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT void JNICALL Java_fishrungames_kobserver_JniWrapper_SendMessage(JNIEnv * env, jobject obj, jstring msg)
|
|||
|
{
|
|||
|
const char *c_msg;
|
|||
|
|
|||
|
c_msg = env->GetStringUTFChars(msg, NULL);
|
|||
|
|
|||
|
if (c_msg == NULL)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
std::string str_msg(c_msg);
|
|||
|
|
|||
|
env->ReleaseStringUTFChars(msg, c_msg);
|
|||
|
|
|||
|
ClientSocket->SendMessageThreaded(str_msg);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
JNIEXPORT jstring JNICALL Java_fishrungames_kobserver_JniWrapper_GetLastMessageHeader(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
|
|||
|
jstring jstr;
|
|||
|
|
|||
|
|
|||
|
if (MessageHeaderArr.size() > 0)
|
|||
|
{
|
|||
|
JavaStringHolder.push_back(MessageHeaderArr[0]);
|
|||
|
jstr = env->NewStringUTF(JavaStringHolder[JavaStringHolder.size()-1].c_str());
|
|||
|
MessageHeaderArr.clear();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
jstr = env->NewStringUTF("");
|
|||
|
}
|
|||
|
|
|||
|
return jstr;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT jstring JNICALL Java_fishrungames_kobserver_JniWrapper_GetLastMessageText(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
|
|||
|
jstring jstr;
|
|||
|
|
|||
|
if (MessageTextArr.size() > 0)
|
|||
|
{
|
|||
|
JavaStringHolder.push_back(MessageTextArr[0]);
|
|||
|
jstr = env->NewStringUTF(JavaStringHolder[JavaStringHolder.size()-1].c_str());
|
|||
|
MessageTextArr.clear();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
jstr = env->NewStringUTF("");
|
|||
|
}
|
|||
|
|
|||
|
return jstr;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
JNIEXPORT int JNICALL Java_fishrungames_kobserver_JniWrapper_GetNumberOfUsers(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
return (*CurrentUserInfoMapArr).size();
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT int JNICALL Java_fishrungames_kobserver_JniWrapper_GetUserUik(JNIEnv * env, jobject obj, int i)
|
|||
|
{
|
|||
|
return (*CurrentUserInfoMapArr)[i].Uik;
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT float JNICALL Java_fishrungames_kobserver_JniWrapper_GetUserPosX(JNIEnv * env, jobject obj, int i)
|
|||
|
{
|
|||
|
return (*CurrentUserInfoMapArr)[i].PosX;
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT float JNICALL Java_fishrungames_kobserver_JniWrapper_GetUserPosY(JNIEnv * env, jobject obj, int i)
|
|||
|
{
|
|||
|
return (*CurrentUserInfoMapArr)[i].PosY;
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT int JNICALL Java_fishrungames_kobserver_JniWrapper_GetUserMapState(JNIEnv * env, jobject obj, int i)
|
|||
|
{
|
|||
|
return (*CurrentUserInfoMapArr)[i].MapState;
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT jstring JNICALL Java_fishrungames_kobserver_JniWrapper_GetUserDescription(JNIEnv * env, jobject obj, int i)
|
|||
|
{
|
|||
|
|
|||
|
std::string State;
|
|||
|
|
|||
|
if ((*CurrentUserInfoMapArr)[i].MapState == 2)
|
|||
|
{
|
|||
|
State = "Тревога";
|
|||
|
}
|
|||
|
else if ((*CurrentUserInfoMapArr)[i].MapState == 3)
|
|||
|
{
|
|||
|
State = "Тревога - Удаление с УИК";
|
|||
|
}
|
|||
|
else if ((*CurrentUserInfoMapArr)[i].MapState == 4)
|
|||
|
{
|
|||
|
State = "Тревога - Вброс";
|
|||
|
}
|
|||
|
else if ((*CurrentUserInfoMapArr)[i].MapState == 5)
|
|||
|
{
|
|||
|
State = "Тревога - Карусель";
|
|||
|
}
|
|||
|
else if ((*CurrentUserInfoMapArr)[i].MapState == 6)
|
|||
|
{
|
|||
|
State = "Тревога - Нападение";
|
|||
|
}
|
|||
|
|
|||
|
std::string status = "Наблюдатель";
|
|||
|
|
|||
|
if ((*CurrentUserInfoMapArr)[i].Status == 1)
|
|||
|
{
|
|||
|
status = "Мобильная группа";
|
|||
|
}
|
|||
|
|
|||
|
std::string descr = "УИК №" + tostr((*CurrentUserInfoMapArr)[i].Uik) + "\\n"+
|
|||
|
(*CurrentUserInfoMapArr)[i].LastName+ "\\n"+
|
|||
|
(*CurrentUserInfoMapArr)[i].FirstName+ "\\n"+
|
|||
|
(*CurrentUserInfoMapArr)[i].MiddleName+ "\\n"+
|
|||
|
(*CurrentUserInfoMapArr)[i].PhoneNumber+ "\\n"+
|
|||
|
status + "\\n" +
|
|||
|
"Состояние: "+State;
|
|||
|
|
|||
|
jstring jstr;
|
|||
|
|
|||
|
jstr = env->NewStringUTF(descr.c_str());
|
|||
|
|
|||
|
return jstr;
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT float JNICALL Java_fishrungames_kobserver_JniWrapper_GetMapCenterPosX(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
return ClientSocket->BaseLon;
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT float JNICALL Java_fishrungames_kobserver_JniWrapper_GetMapCenterPosY(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
return ClientSocket->BaseLat;
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT int JNICALL Java_fishrungames_kobserver_JniWrapper_GetMapCenterZoom(JNIEnv * env, jobject obj)
|
|||
|
{
|
|||
|
return ClientSocket->BaseZoom;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
JNIEXPORT int JNICALL Java_fishrungames_kobserver_JniWrapper_SetPosition(JNIEnv * env, jobject obj, float x, float y)
|
|||
|
{
|
|||
|
ClientSocket->UserInfo.PosX = x;
|
|||
|
ClientSocket->UserInfo.PosY = y;
|
|||
|
|
|||
|
LastPosX = x;
|
|||
|
LastPosY = y;
|
|||
|
}
|
|||
|
|
|||
|
JNIEXPORT void JNICALL Java_fishrungames_kobserver_JniWrapper_ChangeMapType(JNIEnv * env, jobject obj, int mapType)
|
|||
|
{
|
|||
|
MapType = mapType;
|
|||
|
|
|||
|
if (MapType == 0)
|
|||
|
{
|
|||
|
CurrentUserInfoMapArr = &UserInfoMapArr;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CurrentUserInfoMapArr = &UserInfoAlarmMapArr;
|
|||
|
}
|
|||
|
}
|
|||
|
|