#include "hmbdc/app/tcpcast/NetContext.hpp"
#include <iostream>
#include <string>
#include <memory>
#include <unistd.h>
struct ChatMessage
char id[16];
char msg[1000];
};
struct Chatter
:
Client<Chatter, ChatMessage> {
Chatter(char const* id)
: id_(id){}
void handleMessageCb(ChatMessage const& m) {
cout << m.id << ": " << m.msg << endl;
}
private:
string id_;
};
int main(int argc, char** argv) {
if (argc != 4) {
cerr << argv[0] << " local-ip chat-group-name my-name" << endl;
cerr << "multicast should be enabled on local-ip network" << endl;
return -1;
}
auto ifaceAddr = argv[1];
auto chatGroup = argv[2];
auto myId = argv[3];
config.put("ifaceAddr", ifaceAddr);
config.put("loopback", true);
MyContext ctx;
auto& net = NetCtx::instance();
auto sengine = net.createSendTransportEngine(config
, sizeof(ChatMessage));
auto rengine = net.createRecvTransportEngine(config
, ctx.buffer());
ctx.start(1
, 0x01);
ctx.addToPool(*rengine);
ctx.addToPool(*sengine);
Chatter chatter(myId);
ctx.addToPool(chatter);
net.listenTo(t);
auto s = net.getSender(t);
string line;
ChatMessage m;
strncpy(m.id, myId, sizeof(m.id));
cout << "start type a message" << endl;
cout << "ctrl-d to terminate" << endl;
while(getline(cin, line)) {
strncpy(m.msg, line.c_str(), sizeof(m.msg));
s->send(m);
}
net.stopListenTo(t);
}