void* rundle(void* socket){ ServerSocket *client = (ServerSocket *) socket; std::string data; MessageStack messages; UserStack users; User *user; try { user = init_connection(client); } catch (SocketException& e) { printf("Error initial connection in function rundle()\n"); return NULL; } try { users.join(user); user->send("Добро пожаловать, о "); user->send("\n---- // enter \"quit\" for exit\n\n"); user->send(messages.viewLast()); while (true) { data = *user->recive("> "); data = trimr(data); if ( data.compare("quit") == 0) { user->send("Bye! До скорых встреч"); sleep(2); break; } if ( data.compare("help") == 0){ user->send("\r==== Список пользователей ====\n"); } if ( data.compare("who") == 0){ user->send("\r==== Список пользователей ====\n"); std::vector <User*> list = users.list(); for (int i = list.size() - 1; i >= 0; --i){ user->send(list[i]->id); user->send(": "); user->send(list[i]->getName()); user->send("\n"); } continue; } if ( data.length() == 0){ continue; } Message *message = new Message(user->getName(), data); messages.append( message ); users.sendMessage(message->get().c_str()); } } catch (SocketException& e) { std::cout << "Exception was caught:" << e.description() << "\nExiting.\n"; } users.disconnect(user); delete client; return NULL; }