Пример #1
0
void runClient(vector<string> uris)
{
    size_t sent = 0, recv = 0, dropped = 0;

    Endpoint client;

    client.onNewConnection = [] (int fd) {
        fprintf(stderr, "\ncli: new %d\n", fd);;
    };
    client.onLostConnection = [] (int fd) {
        fprintf(stderr, "\ncli: lost %d\n", fd);;
    };

    client.onPayload = [&] (int, Payload&&) {
        recv++;
    };
    client.onDroppedPayload = [&] (int, Payload&&) {
        dropped++;
    };

    for (auto& uri : uris) client.connect(uri);

    thread pollTh([&] { while (true) client.poll(100); });

    Payload payload = pack(string(PayloadSize, 'a'));
    auto sendFn = [&] {
        while (true) {
            client.broadcast(payload);
            sent++;
        }
    };
    thread sendTh(sendFn);


    double start = wall();
    size_t oldSent = 0, oldRecv = 0;

    while (true) {
        lockless::sleep(200);

        string diffSent = getStats(sent - dropped, oldSent);
        string diffRecv = getStats(recv, oldRecv);
        string elapsed = fmtElapsed(wall() - start);

        fprintf(stderr,
                "\r%s> sent: %s, recv: %s",
                elapsed.c_str(), diffSent.c_str(), diffRecv.c_str());
    }
}