#include "pip.h" int main(int argc, char * argv[]) { PIVector 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 x2 = x.map([](int v) {return v / 10.0;}); piCout << x2; piCout << x.reduce([](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 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 y2 = y.map([](int v) {return v / 10.0;}); piCout << y2; piCout << y.reduce([](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 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; }