74 lines
2.1 KiB
C++
74 lines
2.1 KiB
C++
#include "pip.h"
|
|
|
|
|
|
int main(int argc, char * argv[]) {
|
|
PIByteArray rnd;
|
|
rnd.resize(1024*1024, 'x');
|
|
PICLI cli(argc, argv);
|
|
PITimer tm;
|
|
cli.addArgument("connect", true);
|
|
cli.addArgument("name", true);
|
|
PICloudClient c("127.0.0.1:10101");
|
|
// c.setReopenEnabled(true);
|
|
PICloudServer s("127.0.0.1:10101");
|
|
PIVector<PICloudServer::Client *> clients;
|
|
CONNECTL(&tm, tickEvent, ([&](void *, int){
|
|
if (c.isConnected()) {
|
|
PIString str = "ping";
|
|
piCout << "[Client] send:" << str;
|
|
c.write(str.toByteArray());
|
|
}
|
|
if (s.isRunning()) {
|
|
for (auto cl : clients) {
|
|
if (cl->isOpened()) {
|
|
PIString str = "ping_S";
|
|
piCout << "[Server] send to" << cl << ":" << str;
|
|
cl->write(str.toByteArray());
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
CONNECTL(&c, threadedReadEvent, ([&](uchar * readed, int size){
|
|
PIByteArray ba(readed, size);
|
|
if (size < 1024) {
|
|
PIString str = PIString(ba);
|
|
piCout << "[Client] data:" << str;
|
|
if (str == "ping_S") c.write(PIString("pong_S").toByteArray());
|
|
} else piCout << "[Client] blob:" << size;
|
|
}));
|
|
CONNECTL(&c, connected, ([](){piCout << "connected";}));
|
|
CONNECTL(&c, disconnected, ([](){piCout << "disconnected";}));
|
|
CONNECTL(&s, newConnection, ([&](PICloudServer::Client * cl){
|
|
piCout << "[Server] new client:" << cl;
|
|
clients << cl;
|
|
CONNECTL(cl, threadedReadEvent, ([&c, &s, cl, &rnd](uchar * readed, int size){
|
|
PIByteArray ba(readed, size);
|
|
PIString str = PIString(ba);
|
|
piCout << "[Server] data from" << cl << ":" << str;
|
|
if (str == "ping") {
|
|
cl->write(PIString("pong").toByteArray());
|
|
cl->write(rnd);
|
|
}
|
|
}));
|
|
CONNECTL(cl, closed, ([&clients, cl](){
|
|
cl->stop();
|
|
clients.removeAll(cl);
|
|
cl->deleteLater();
|
|
}));
|
|
cl->startThreadedRead();
|
|
}));
|
|
if (cli.hasArgument("name")) s.setServerName(cli.argumentValue("name"));
|
|
if (cli.hasArgument("connect")) {
|
|
c.setServerName(cli.argumentValue("connect"));
|
|
c.startThreadedRead();
|
|
} else {
|
|
s.startThreadedRead();
|
|
}
|
|
tm.start(1000);
|
|
PIKbdListener ls;
|
|
ls.enableExitCapture(PIKbdListener::F10);
|
|
ls.start();
|
|
WAIT_FOR_EXIT
|
|
return 0;
|
|
}
|