Files
pip/main.cpp
2021-09-24 16:03:20 +03:00

124 lines
3.7 KiB
C++

#include "pip.h"
int main(int argc, char * argv[]) {
PIVector<int> data(10, [](int i)->int{return i;});
piCout << data;
PIThreadPoolLoop pool;
pool.setFunction([&](int i){
data[i] = data[i] + 10;
});
pool.exec(0, data.size());
piCout << data;
return 0;
PIVector<int> x(20, [](int i) {return i;});
piCout << x;
piCout << x.any([](int v) {return v == 10;});
piCout << x.every([](int v) {return v > 0;});
piCout << x.etries([](int v) {return v % 5 == 0;});
piCout << x.indexWhere([](int v) {return v % 8 == 0;});
piCout << x.indexOf(4, -1);
piCout << x.lastIndexOf(1, 0);
piCout << x.lastIndexWhere([](int v) {return v % 8 == 0;});
PIVector<double> x2 = x.map<double>([](int v) {return v / 10.0;});
piCout << x2;
piCout << x.reduce<PIString>([](int v, PIString s){return s + PIString::fromNumber(v);});
piCout << x.removeWhere([](int v){return v % 2 == 0;});
piCout << x.getRange(8, 1);
piCout << x.getRange(8, 100);
piCout << "=====================";
PIDeque<int> y(20, [](int i) {return i;});
piCout << y;
piCout << y.any([](int v) {return v == 10;});
piCout << y.every([](int v) {return v > 0;});
piCout << y.etries([](int v) {return v % 5 == 0;});
piCout << y.indexWhere([](int v) {return v % 8 == 0;});
piCout << y.indexOf(4, -1);
piCout << y.lastIndexOf(1, 0);
piCout << y.lastIndexWhere([](int v) {return v % 8 == 0;});
PIDeque<double> y2 = y.map<double>([](int v) {return v / 10.0;});
piCout << y2;
piCout << y.reduce<PIString>([](int v, PIString s){return s + PIString::fromNumber(v);});
piCout << y.removeWhere([](int v){return v % 2 == 0;});
piCout << y.getRange(8, 1);
piCout << y.getRange(8, 100);
return 0; // TODO:
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;
}