Ejemplo n.º 1
0
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;
}