87 lines · 1.9 KB · C++
RawDownload
#include "ReliableStream.h"#include <iostream>#include <vector>#include <string>#include <stdint.h>#include <iomanip> class Forwarder : public Stream{public:    std::string prefix;    Forwarder *other;    std::vector<std::vector<uint8_t>> packets;     virtual void write(const void* p, size_t n)    {        std::cout << prefix << ": ";        for(size_t i = 0; i < n; i++)            std::cout << std::hex << std::setfill('0') << std::setw(2) << (int) ((uint8_t*)p)[i] << " ";        std::cout << std::endl;        other->enqueueReceive(p,n);    }     void enqueueReceive(const void* p, size_t n)    {        packets.emplace_back((const uint8_t*)p, ((const uint8_t*)p)+n);    }     void idle()    {        std::vector<std::vector<uint8_t>> packets2;        packets2.swap(packets);        for(auto& p : packets2)            notifyReceive(p.data(), p.size());    }}; class DumpToConsole : public StreamListener{public:    std::string prefix;     DumpToConsole(std::string prefix) : prefix(prefix) {}     size_t onReceive(const uint8_t* p, size_t n)    {        std::cout << prefix;        for(size_t i = 0; i < n; i++)        {            if(p[i] >= 128 || p[i] < 32)                std::cout << "\\x" << std::hex << (unsigned)p[i];            else                std::cout << p[i];        }        std::cout << std::endl;        return n;    }}; int main(){    Forwarder fwd1, fwd2;    fwd1.other = &fwd2;    fwd2.other = &fwd1;    fwd1.prefix = "1->2";    fwd2.prefix = "2->1";     ReliableStream rel1(&fwd1), rel2(&fwd2);     DumpToConsole dump1("one:");    DumpToConsole dump2("two:");        rel1.setListener(&dump1);    rel2.setListener(&dump2);     rel1.write("Hello, world.", 13);    rel1.flushWrite();     for(int i = 0; i < 10; i++)    {        std::cout << "handle 1:\n";        fwd1.idle();        std::cout << "handle 2:\n";        fwd2.idle();    }    return 0;}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t