Beispiel #1
0
int SendJSONCmd(char *js, char *rsp, uint16_t rsp_len) {
    int timeout = 5000; // In milliseconds
    
    SOCKET sclient;
    if ( ConnectToClient(&sclient, DUO_SERVER_IP_ADDRESS, DUO_SERVER_CMD_PORT) < 0 ) {
        return -1;
    }
    
    setsockopt(sclient,SOL_SOCKET,SO_SNDTIMEO,(const char*)&timeout,sizeof(timeout));
    setsockopt(sclient,SOL_SOCKET,SO_RCVTIMEO,(const char*)&timeout,sizeof(timeout));
    
    // Send request
    if (cmdline_params.verbose) printf("\nSend json request command:\n\n%s\n\n", js);
    
    if (send(sclient, js, strlen(js), 0) == SOCKET_ERROR) {
        printf("\nERROR: Sent request command failed!\n");
        closesocket(sclient);
        WSACleanup();
        return -1;
    }

    // Receive respond
    int ret = recv(sclient, rsp, rsp_len, 0);
    rsp[ret] = '\0';
    if (ret <= 0) {
        printf("\nERROR: Receive respond timeout!\n");
        closesocket(sclient);
        WSACleanup();
        return -1;
    }
    if (cmdline_params.verbose) printf("\nReceived: %s\n", rsp);
    
    closesocket(sclient);
    WSACleanup();
    
    return 0;
}
bool NetworkConnectionMenu::signal_ok()
{
  bool r = false;
  std::list<GameServerInfo> lst;

  // Hack: force loading of teams before creating threads.
  GetTeamsList();

  // Which tab is displayed ?
  std::string id = tabs->GetCurrentTabId();

  if (id == TAB_SERVER_ID) {
    // Hosting your own server
    r = HostingServer(srv_port_number->GetText(),
                      srv_game_name->GetText(),
                      srv_game_pwd->GetPassword(),
                      srv_internet_server->GetValue());
    if (!r)
      goto out;

    // Remember the parameters
    Config::GetInstance()->SetNetworkServerPort(srv_port_number->GetText());
    Config::GetInstance()->SetNetworkServerGameName(srv_game_name->GetText());
    Config::GetInstance()->SetNetworkServerPublic(srv_internet_server->GetValue());

  } else if (id == TAB_CLIENT_ID) { // Direct connexion to a server

    if (cl_net_games_lst->GetSelectedItem() != -1) {
      // Connect to an internet game!
      r = ConnectToClient(cl_net_games_lst->GetAddress(),
                          cl_net_games_lst->GetPort(),
                          cl_net_server_pwd->GetPassword());
      if (!r)
        goto out;

    } else if (!cl_server_address->GetText().empty()) {
      r = ConnectToClient(cl_server_address->GetText(),
                          cl_port_number->GetText(),
                          cl_server_pwd->GetPassword());
      if (!r)
        goto out;

      // Remember the parameters
      Config::GetInstance()->SetNetworkClientHost(cl_server_address->GetText());
      Config::GetInstance()->SetNetworkClientPort(cl_port_number->GetText());
    } else
      goto out;
  } else if (id == TAB_MANUAL_ID) {
    if (!cl_server_address->GetText().empty()) {
      r = ConnectToClient(cl_server_address->GetText(),
                          cl_port_number->GetText(),
                          cl_server_pwd->GetPassword());
      if (!r)
        goto out;

      // Remember the parameters
      Config::GetInstance()->SetNetworkClientHost(cl_server_address->GetText());
      Config::GetInstance()->SetNetworkClientPort(cl_port_number->GetText());
    }
  }

  if (Network::IsConnected()) {
    play_ok_sound();

    // run the network menu ! :-)
    NetworkMenu nm;
    Network::GetInstance()->network_menu = &nm;
    nm.Run();
    Network::GetInstance()->network_menu = NULL;
    IndexServer::GetInstance()->Disconnect();

    Network::Disconnect();

    // Don't go back to main menu after playing
    Menu::RedrawMenu();
    ThreadRefreshList();

    return false;
  }

 out:
  Network::Disconnect();
  return r;
}