-
Notifications
You must be signed in to change notification settings - Fork 0
/
goFlexCOM.cpp
113 lines (92 loc) · 2.32 KB
/
goFlexCOM.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
* goFlexCOM.cpp
* emptyExample
*
* Created by gameover on 4/06/11.
* Copyright 2011 trace media. All rights reserved.
*
*/
#include "goFlexCOM.h"
bool goFlexCOM::setup(int port) {
ofLog(OF_LOG_VERBOSE, "Setting up server and client for TCP communication with Flex");
successServer = false;
successServer = tcpServer.setup(port);
ofSetFrameRate(30);
if (successServer) {
waitTime = ofGetElapsedTimeMillis();
state = kFLEXCOM_LOAD;
return true;
} else {
state = kFLEXCOM_ERROR;
return false;
}
}
void goFlexCOM::close() {
tcpServer.close();
}
void goFlexCOM::update() {
if (successServer && tcpServer.getNumClients() >= 1) {
string messageSND = "";
for(int i = 0; i < tcpServer.getNumClients(); i++){
//ofLog(OF_LOG_VERBOSE, "STATE: %s", states[state].c_str());
string messageRCV = tcpServer.receive(i);;
switch (state) {
case kFLEXCOM_HAND:
ofLog(OF_LOG_VERBOSE, "Sending hand shake");
messageSND = "HAND";
state = kFLEXCOM_SHAKE;
break;
case kFLEXCOM_SHAKE:
if (messageRCV == "SHAKE") {
ofLog(OF_LOG_VERBOSE, "Received hand shake");
state = kFLEXCOM_READY;
} else {
if (ofGetElapsedTimeMillis() > waitTime + MAX_WAIT_TIME) {
waitTime = ofGetElapsedTimeMillis();
state = kFLEXCOM_HAND;
}
}
break;
case kFLEXCOM_READY:
if (messageRCV != "") {
ofLog(OF_LOG_VERBOSE, "TCPRCV: %s", messageRCV.c_str());
ofNotifyEvent(messageReceived, messageRCV, this);
if (messageRCV == "EXIT") {
cout << "EXIT RCV" << endl;
messageSND = "EXIT";
}
if (messageRCV == "BYE") {
ofSleepMillis(2000);
waitTime = ofGetElapsedTimeMillis();
state = kFLEXCOM_LOAD;
}
}
break;
case kFLEXCOM_ERROR:
ofLog(OF_LOG_VERBOSE, "kFLEXCOM_ERROR!!!");
break;
default:
break;
}
}
if (messageSND != "") {
sendToAll(messageSND);
}
}
}
void goFlexCOM::sendToAll(string messageSND) {
ofSleepMillis(200);
int sent = tcpServer.sendToAll(messageSND.c_str());
ofLog(OF_LOG_VERBOSE, "TCPSND: %s with %d bytes", messageSND.c_str(), sent);
}
void goFlexCOM::setState(int _state) {
state = _state;
}
bool goFlexCOM::checkState(int _state) {
if (_state == state) {
return true;
} else return false;
}
int goFlexCOM::getState() {
return state;
}