Example #1
0
ChatControl::ChatControl(ChatControlListener* listener):
m_listener(listener),
timeStamps(BOOLSETTING(TIME_STAMPS)),
m_headerHeight(32),
curCommandPosition(0),
currentNeedlePos(-1),
containerView(this, mapView),
containerMessage(this, mapMessage),
containerEmoticons(this, mapEmoticons)
{
  initCommandMap();
}
Example #2
0
void* main_loop (void* arg)
{
    int srv_socket, tmp_socket;
    socklen_t cln_addr_size;
    struct sockaddr_in srv_addr, cln_addr;

    srv_addr.sin_family = AF_INET;
    srv_addr.sin_addr.s_addr = INADDR_ANY;
    srv_addr.sin_port = htons (port);

    bzero (cln_sockets, connectionLimit * sizeof (int));

    if ((srv_socket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
        perror ("Main socket creation error:");
        exit (EXIT_FAILURE);
    }

    if (bind (srv_socket, (struct sockaddr*) &srv_addr, sizeof srv_addr) == -1) {
        perror ("Main socket bind error:");
        exit (EXIT_FAILURE);
    }

    if (listen (srv_socket, 16) == -1) {
        perror ("Main socket listen error:");
        exit (EXIT_FAILURE);
    } 

    printf ("Main socket started\n");

    initCommandMap();
    while (1) {
        cln_addr_size = sizeof cln_addr;
        if ((tmp_socket = accept (srv_socket, (struct sockaddr*) &cln_addr, &cln_addr_size)) == -1) {
            perror ("Main socket accept error:");
            continue;
        }

        pthread_mutex_lock (&sock_mutex);
        unsigned i;
        for (i = 0; i < connectionLimit; i++)
            if (cln_sockets [i] == 0) {
                cln_sockets [i] = tmp_socket;
                break;
            } 
        pthread_mutex_unlock (&sock_mutex);

        if (i == connectionLimit) {
            printf ("Too many connections\n");
            close (tmp_socket);
            continue;
        }

        string ip(inet_ntoa(cln_addr.sin_addr));

        pthread_mutex_lock (&ses_mutex);
        // create session
        ses.isAuthenticated = false;
        ses.csck = cln_sockets[i];
        ses.currentDir.assign("./filesystem/");
        ses.t = ASCII;
        ses.f = NON_PRINT;
        ses.m = NONE;
        ses.ip = ip;
        ses.clientPort = cln_addr.sin_port;

        if (pthread_create (&client_threads [i], NULL, client_loop, &ses) != 0) {
            pthread_mutex_unlock (&ses_mutex);
            printf ("Error creating new client thread\n");
            continue;
        } 
    }
}