#include #include #include #include #include #include "Protocol.h" using namespace std; void * thread_send(void *); int trim(int); int untrim(int); int main (void) { try { pthread_t thSend; Sock_Multicast *ms = new Sock_Multicast(ADDRESS_BIND, PORT_MULTI, ADDRESS_MULTI); ms->start(); cout << "Multicast started..." << endl; pthread_create(&thSend, NULL, thread_send, (void*)ms); cout << "Thread started..." << endl; while (1) { string line; *ms >> line; transform (line.begin(), line.end(), line.begin(), ::trim); line.push_back('\0'); //cout << "Recu(" << line.size() << "): " << line << endl; string message; message.append(line.substr(0, line.find(';'))); string pseudo; pseudo.append(line.substr(message.size(), line.size() - message.size())); pseudo = pseudo.substr(pseudo.find_first_not_of(';'), pseudo.size()); pseudo = pseudo.substr(0, pseudo.find_first_of(';')); cout << "<" << pseudo << "> " << message << endl; } } catch (Exception e) { cout << e << endl; } return 1; } void * thread_send(void *s) { Sock_Multicast *ms = (Sock_Multicast *) s; string pseudo; cout << "Enter nickname: "; cin >> pseudo; cin.ignore(); cout << "Begin reading..." << endl; while (1) { string line; getline(cin, line); int size = 50 - line.size(); line.append(size, ';'); line.append(pseudo); size = 20 - pseudo.size() + 4; line.append(size, ';'); transform (line.begin(), line.end(), line.begin(), ::untrim); *ms << line; } return NULL; } int trim(int c) { if (c == 0) c = (int) ';'; return c; } int untrim(int c) { if (c == ';') c = 0; return c; }