|
|
|
@ -49,8 +49,6 @@ Network::~Network() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Network::ThreadProcess() {
|
|
|
|
void Network::ThreadProcess() {
|
|
|
|
list<UNIX*>::iterator iteru;
|
|
|
|
|
|
|
|
UNIX *u;
|
|
|
|
|
|
|
|
int i = 0;
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
|
|
|
|
int timeout10s;
|
|
|
|
int timeout10s;
|
|
|
|
@ -65,21 +63,7 @@ void Network::ThreadProcess() {
|
|
|
|
while (running) {
|
|
|
|
while (running) {
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// check network
|
|
|
|
// check network
|
|
|
|
|
|
|
|
webserver.Loop();
|
|
|
|
//
|
|
|
|
|
|
|
|
// server socket
|
|
|
|
|
|
|
|
ServerLoop();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// client socket
|
|
|
|
|
|
|
|
for (iteru = clients.begin(); iteru != clients.end(); iteru++) {
|
|
|
|
|
|
|
|
if (ClientLoop((UNIX*) *iteru) < 0) {
|
|
|
|
|
|
|
|
u = *iteru;
|
|
|
|
|
|
|
|
clients.remove(u);
|
|
|
|
|
|
|
|
delete u;
|
|
|
|
|
|
|
|
iteru = clients.begin();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gettimeofday (&tv, NULL);
|
|
|
|
gettimeofday (&tv, NULL);
|
|
|
|
i = (tv.tv_sec-tv_loop.tv_sec) * 1000 + (tv.tv_usec - tv_loop.tv_usec) / 1000;
|
|
|
|
i = (tv.tv_sec-tv_loop.tv_sec) * 1000 + (tv.tv_usec - tv_loop.tv_usec) / 1000;
|
|
|
|
@ -108,12 +92,11 @@ int Network::Start() {
|
|
|
|
mtx = PTHREAD_MUTEX_INITIALIZER;
|
|
|
|
mtx = PTHREAD_MUTEX_INITIALIZER;
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// start socket server
|
|
|
|
// start the webserver
|
|
|
|
//
|
|
|
|
//
|
|
|
|
if (sockserver.Listen(UNIX_SOCKET_FILE) != 1) {
|
|
|
|
webserver.SetupDocumentRoot("webinterface");
|
|
|
|
return 0;
|
|
|
|
webserver.SetupPorts(1080, 1081);
|
|
|
|
}
|
|
|
|
webserver.Start();
|
|
|
|
chmod(UNIX_SOCKET_FILE, 00666);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
thread_running = 1;
|
|
|
|
thread_running = 1;
|
|
|
|
pthread_attr_init (&attr);
|
|
|
|
pthread_attr_init (&attr);
|
|
|
|
@ -129,8 +112,7 @@ int Network::Start() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Network::Stop() {
|
|
|
|
void Network::Stop() {
|
|
|
|
sockserver.Close();
|
|
|
|
webserver.Stop();
|
|
|
|
unlink(UNIX_SOCKET_FILE);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -146,17 +128,6 @@ void Network::ChangeListPushToAll(string changes) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int Network::ServerLoop() {
|
|
|
|
|
|
|
|
UNIX *u = NULL;
|
|
|
|
|
|
|
|
if (sockserver.IsData(10)) {
|
|
|
|
|
|
|
|
u = sockserver.Accept();
|
|
|
|
|
|
|
|
clients.push_back(u);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Session *Network::GetSession(int sid) {
|
|
|
|
Session *Network::GetSession(int sid) {
|
|
|
|
Session *s = NULL;
|
|
|
|
Session *s = NULL;
|
|
|
|
list<Session*>::iterator iter;
|
|
|
|
list<Session*>::iterator iter;
|
|
|
|
@ -174,9 +145,8 @@ Session *Network::GetSession(int sid) {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int Network::ClientLoop(UNIX *client) {
|
|
|
|
int Network::ClientLoop(JSONParse *jpin, JSONParse *jpout) {
|
|
|
|
char bufferin[BUFFERSIZE];
|
|
|
|
int rid, sid;
|
|
|
|
int len, rid, sid;
|
|
|
|
|
|
|
|
list<Session*>::iterator siter;
|
|
|
|
list<Session*>::iterator siter;
|
|
|
|
Session *session = NULL;
|
|
|
|
Session *session = NULL;
|
|
|
|
string value;
|
|
|
|
string value;
|
|
|
|
@ -187,23 +157,18 @@ int Network::ClientLoop(UNIX *client) {
|
|
|
|
struct timeval timer;
|
|
|
|
struct timeval timer;
|
|
|
|
|
|
|
|
|
|
|
|
timer_start(&timer);
|
|
|
|
timer_start(&timer);
|
|
|
|
|
|
|
|
|
|
|
|
len = client->ReadTimeout(bufferin, BUFFERSIZE, 20);
|
|
|
|
|
|
|
|
if (len > 0 && len < BUFFERSIZE) {
|
|
|
|
|
|
|
|
JSONParse json;
|
|
|
|
|
|
|
|
JSONParse jsonout;
|
|
|
|
|
|
|
|
JSONParse jelement;
|
|
|
|
JSONParse jelement;
|
|
|
|
|
|
|
|
|
|
|
|
bufferin[len] = 0; // prevent reading behind the data
|
|
|
|
if (jpin == NULL || jpout == NULL) return 0;
|
|
|
|
|
|
|
|
jpout->Clear();
|
|
|
|
|
|
|
|
|
|
|
|
json.Set(bufferin);
|
|
|
|
if (!jpin->GetValue("sid", &ssid)) {
|
|
|
|
if (!json.GetValue("sid", &ssid)) {
|
|
|
|
debug ("jpin->GetValue error --> sid");
|
|
|
|
debug ("json.GetValue error --> sid");
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!json.GetValue("rid", &srid)) {
|
|
|
|
if (!jpin->GetValue("rid", &srid)) {
|
|
|
|
debug ("json.GetValue error --> rid");
|
|
|
|
debug ("jpin->GetValue error --> rid");
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -250,40 +215,33 @@ int Network::ClientLoop(UNIX *client) {
|
|
|
|
JSONElement je;
|
|
|
|
JSONElement je;
|
|
|
|
int retval;
|
|
|
|
int retval;
|
|
|
|
|
|
|
|
|
|
|
|
retval = session->ProcessData(&json, &jsonout);
|
|
|
|
retval = session->ProcessData(jpin, jpout);
|
|
|
|
|
|
|
|
|
|
|
|
len = BUFFERSIZE;
|
|
|
|
|
|
|
|
if (retval) {
|
|
|
|
if (retval) {
|
|
|
|
je.Clear();
|
|
|
|
je.Clear();
|
|
|
|
je.Set("success", 1);
|
|
|
|
je.Set("success", 1);
|
|
|
|
jsonout.AddObject(je);
|
|
|
|
jpout->AddObject(je);
|
|
|
|
je.Clear();
|
|
|
|
je.Clear();
|
|
|
|
je.Set("serverstatus", server->GetStatus());
|
|
|
|
je.Set("serverstatus", server->GetStatus());
|
|
|
|
jsonout.AddObject(je);
|
|
|
|
jpout->AddObject(je);
|
|
|
|
je.Clear();
|
|
|
|
je.Clear();
|
|
|
|
je.Set("simulation", simulation);
|
|
|
|
je.Set("simulation", simulation);
|
|
|
|
jsonout.AddObject(je);
|
|
|
|
jpout->AddObject(je);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
je.Clear();
|
|
|
|
je.Clear();
|
|
|
|
je.Set("success", 0);
|
|
|
|
je.Set("success", 0);
|
|
|
|
jsonout.AddObject(je);
|
|
|
|
jpout->AddObject(je);
|
|
|
|
je.Clear();
|
|
|
|
je.Clear();
|
|
|
|
je.Set("serverstatus", "ERROR");
|
|
|
|
je.Set("serverstatus", "ERROR");
|
|
|
|
jsonout.AddObject(je);
|
|
|
|
jpout->AddObject(je);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
s = jsonout.ToString();
|
|
|
|
|
|
|
|
client->Write((char*)s.c_str(), strlen(s.c_str()));
|
|
|
|
|
|
|
|
result = 1;
|
|
|
|
result = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
// no session found
|
|
|
|
// no session found
|
|
|
|
result = 0;
|
|
|
|
result = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (len == 0) {
|
|
|
|
|
|
|
|
result = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|