You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.1 KiB
93 lines
2.1 KiB
#include "TCPServer.h"
|
|
|
|
shared_ptr<TCPServer> TCPServer::_instance = 0;
|
|
|
|
shared_ptr<TCPServer> TCPServer::instance(){
|
|
if(_instance == 0){
|
|
_instance = shared_ptr<TCPServer>(new TCPServer);
|
|
}
|
|
return _instance;
|
|
}
|
|
|
|
TCPServer::TCPServer(){
|
|
std::cout << "TCPServer initialized" << std::endl;
|
|
}
|
|
|
|
void TCPServer::setup(int port){
|
|
_tcpServer.setup(port);
|
|
}
|
|
|
|
void TCPServer::update(){
|
|
int numClients = _tcpServer.getLastID();
|
|
for(auto i = 0; i < numClients; ++i){
|
|
if(_tcpServer.isClientConnected(i)){
|
|
|
|
// Notify application when new client connects
|
|
if(!_tcpConnections[i]){
|
|
ofxJSONElement json;
|
|
json["ip"] = _tcpServer.getClientIP(i);
|
|
json["port"] = _tcpServer.getClientPort(i);
|
|
json["id"] = i;
|
|
json["event"] = "connected";
|
|
|
|
ofMessage message(json.getRawString());
|
|
ofSendMessage(message);
|
|
|
|
_tcpConnections[i] = true;
|
|
}
|
|
|
|
// Receive messages
|
|
string rx = _tcpServer.receive(i);
|
|
if(rx.length() > 0){
|
|
ofxJSONElement json;
|
|
bool ok = json.parse(rx);
|
|
|
|
if(!ok){
|
|
json["ip"] = _tcpServer.getClientIP(i);
|
|
json["port"] = _tcpServer.getClientPort(i);
|
|
json["id"] = i;
|
|
json["event"] = "received";
|
|
json["data"] = rx;
|
|
}
|
|
|
|
ofMessage message(json.getRawString());
|
|
ofSendMessage(message);
|
|
}
|
|
}else{
|
|
|
|
// Notify application when client disconnects
|
|
if(_tcpConnections[i]){
|
|
ofxJSONElement json;
|
|
json["ip"] = _tcpServer.getClientIP(i);
|
|
json["port"] = _tcpServer.getClientPort(i);
|
|
json["id"] = i;
|
|
json["event"] = "disconnected";
|
|
|
|
ofMessage message(json.getRawString());
|
|
ofSendMessage(message);
|
|
|
|
_tcpConnections[i] = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void TCPServer::draw(){
|
|
int numClients = _tcpServer.getLastID();
|
|
int clientsConnected = 0;
|
|
for(auto i = 0; i < numClients; ++i){
|
|
if(_tcpServer.isClientConnected(i)){
|
|
ofSetColor(0, 255, 0);
|
|
ofPushMatrix();
|
|
ofTranslate(10, 10);
|
|
ofDrawRectangle(clientsConnected * 20, 0, 10, 10);
|
|
ofPopMatrix();
|
|
clientsConnected++;
|
|
}
|
|
}
|
|
}
|
|
|
|
void TCPServer::send(int clientID, std::string message){
|
|
_tcpServer.send(clientID, message);
|
|
}
|
|
|
|
|