ofxPiMapper fixed for C++17 & oF 12.0
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

#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);
}