コード例 #1
0
ファイル: mainwindow.cpp プロジェクト: bmael/DameGame
/**
 * @brief Instanciates and starts all listeners thread (chat, online players).
 * @pre The client have to be connected before to call this function.
 */
void MainWindow::startListeners()
{
    // Start a thread for listening server requests.
    _listener = new Listener(_player.socket, this);

    connect(_listener, SIGNAL(pseudoAlreadyExists(QString)), this, SLOT(pseudoAlreadyExists(QString)));

    connect(_listener, SIGNAL(addMsg(QString)), this, SLOT(addMsg(QString)));

    connect(_listener, SIGNAL(addPlayerToView(player)), this, SIGNAL(askAddPlayer(player)));
    connect(_listener, SIGNAL(removePlayerFromView(player)), this, SIGNAL(askRmPlayer(player)));

    connect(_listener,  SIGNAL(advisePlayerForGame(QString)), this, SLOT(adviseForGame(QString)));
    connect(_listener, SIGNAL(advisePlayerForAbortedGame(QString)), this, SLOT(adviseForAbortedGame(QString)));

    connect(_listener, SIGNAL(startGame()), this, SLOT(startGame()));

    connect(_listener, SIGNAL(clientBusy(player)), ui->rightMenuWidget, SIGNAL(askSetBusy(player)));
    connect(_listener, SIGNAL(clientFree(player)), ui->rightMenuWidget, SIGNAL(askSetFree(player)));

    connect(_listener, SIGNAL(setOpponent(player)), this, SLOT(setOpponent(player)));
    connect(_listener, SIGNAL(opponentQuit(player)), this, SLOT(opponentQuit(player)));

    connect(_listener, SIGNAL(receiveCheckerboard(checkerboard)), ui->checkerboardwidget, SLOT(receiveCheckerboard(checkerboard)));
    connect(_listener, SIGNAL(receiveWinner(player)), this, SLOT(displayWinner(player)));
}
コード例 #2
0
ファイル: server.c プロジェクト: sclaxton/chirc
void acceptClients(serv *server){
    int socket = server->socket;

    struct sockaddr_in clientAddr;
    int clientSocket;

    pthread_attr_t worker_attr;
    pthread_attr_init(&worker_attr);
    pthread_attr_setdetachstate(&worker_attr, PTHREAD_CREATE_DETACHED);
    pthread_t worker_thread;

    socklen_t sinSizeClient = sizeof(struct sockaddr_in);

    /*the accept loop*/
    while(1){
        if((clientSocket = accept(socket, (struct sockaddr *) &clientAddr, &sinSizeClient)) < 0){
            perror("ERROR: Could not accept client");
            continue;
        }

        /*resolve the clients host name*/
        bstring clientHostName = safe_BfromCstr("");
        int rc = getnameinfo((struct sockaddr *) &clientAddr, sinSizeClient,
                    charBuffromBstr(clientHostName), IRC_MAX_LEN+1, NULL, 0, 0);
        clientHostName->slen = strlen(charBuffromBstr(clientHostName));
        if (rc != 0 || !clientHostName->slen){
            bdestroy(clientHostName);
            clientHostName = safe_BfromCstr("unresolved");
        }
        /*init the client*/
        cli *newClient = initClient(clientSocket, clientHostName, server);
        /*create thread to wait for the client to register and then handle client request*/
        if (pthread_create(&worker_thread, &worker_attr, &enterRegister, newClient) != 0){
            clientFree(newClient);
            close(socket);
            errnoExit("ERROR: Could not create thread");
        }
    }

    /*free server*/
    serverFree(server);
}
コード例 #3
0
ファイル: main.cpp プロジェクト: HrochL/CWSL
///////////////////////////////////////////////////////////////////////////////
// Main function
int main(int argc, char **argv)
{WSADATA wsd;
 SOCKET sClient;
 struct sockaddr_in local, client;
 int iAddrSize;
 char fileName[_MAX_PATH + 1];
 char *pFN, *pc;

 // create the prefix and suffix for the shared memories names
 strcpy(gPreSM, "CWSL");
 strcpy(gPostSM, "Band");
 ::GetModuleFileName(NULL, fileName, _MAX_PATH);
 #define BASE_FNAME "CWSL_Net"
 pFN = strstr(fileName, BASE_FNAME);
 if (pFN != NULL)
 {
  pFN += strlen(BASE_FNAME);
  for (pc = pFN; (*pc != '\0') && (*pc != '.'); pc++);
  *pc = '\0';
  strcat(gPostSM, pFN);
 }

 // print info
 printf("Starting (%s#%s) ...\n", gPreSM, gPostSM);

 // initialize slots
 clientInit();

 // initialize sockets
 if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
 {printf("Failed to load Winsock!\n");
  return 1;
 }

 // create our listening socket
 sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
 if (sListen == SOCKET_ERROR)
 {printf("socket() failed: %d\n", WSAGetLastError()); return 1;}

 // bind it to our well-known port
 local.sin_addr.s_addr = htonl(INADDR_ANY);
 local.sin_family = AF_INET;
 local.sin_port = htons(LISTEN_PORT);
 if (bind(sListen, (struct sockaddr *)&local, sizeof(local)) == SOCKET_ERROR)
 {printf("bind() failed: %d\n", WSAGetLastError()); return 1;}
    
 // set socket into listen mode
 listen(sListen, 8);
 
 // register console control handler
 if (!SetConsoleCtrlHandler((PHANDLER_ROUTINE)ControlHandler, TRUE))
  printf("Can't register console control handler!\n");
    
 // print info
 printf("Started\n");

 // main loop
 while (1)
 {// perform a blocking accept() call
  iAddrSize = sizeof(client);
  sClient = accept(sListen, (struct sockaddr *)&client, &iAddrSize);
  if (sClient == INVALID_SOCKET)
  {printf("accept() failed: %d\n", WSAGetLastError()); break;}
    
  // create new client thread
  if (!clientNew(&client, sClient)) printf("clientNew() failed: %d\n", GetLastError());
 }
 
 // print info
 printf("Stopping ...\n");

 // close listen socket
 closesocket(sListen);

 // free all clients
 clientFree();
 
 // cleanup sockets
 WSACleanup();
 
 // print info
 printf("Stopped\n");

 // that't all
 return 0;
}