Beispiel #1
0
MainWindow::MainWindow(std::unique_ptr<BootParameters> boot_parameters) : QMainWindow(nullptr)
{
  setWindowTitle(QString::fromStdString(Common::scm_rev_str));
  setWindowIcon(Resources::GetAppIcon());
  setUnifiedTitleAndToolBarOnMac(true);
  setAcceptDrops(true);

  InitControllers();

  CreateComponents();

  ConnectGameList();
  ConnectHost();
  ConnectToolBar();
  ConnectRenderWidget();
  ConnectStack();
  ConnectMenuBar();
  ConnectHotkeys();

  InitCoreCallbacks();

  NetPlayInit();

  if (boot_parameters)
    StartGame(std::move(boot_parameters));
}
Beispiel #2
0
void reconnect(int nSignal)
{
    int nRet;

    ErrorLog(TRACE, "SIGUSR2 reconnect...");

    //signal(SIGUSR2, reconnect);
            
    /* 关闭socket */
    close(gnParentSock);

    /*LINK_CLIENT N*/
	UpdShmHostNet(gnShmHostId, LINK_CLIENT, gnCommNum, 'N');

    ConnectHost();
    ErrorLog(TRACE, "reconnect SUCC");
    
}
Beispiel #3
0
void
CycleServers()

{
	if (HubSock == NOSOCKET)
	{
		if (currenthub)
		{
			if (!currenthub->next)
				currenthub = ServList;
			else
				currenthub = currenthub->next;
		}
		else
			currenthub = ServList;

		SendUmode(OPERUMODE_Y,
		          "*** Cycling server list");

		while (currenthub)
		{
			/* Begin connection to server */
			if ((HubSock = ConnectHost(currenthub->hostname, currenthub->port)) >= 0)
			{
				currenthub->sockfd = HubSock;

				SetHubConnect(currenthub);

				break;
			}
			else
			{
				SendUmode(OPERUMODE_Y,
				          "*** Unable to connect to %s:%d (%s)",
				          currenthub->hostname,
				          currenthub->port,
				          strerror(errno));

				HubSock = NOSOCKET;
				currenthub = currenthub->next;
			}
		} /* while (currenthub) */
	} /* if (HubSock == NOSOCKET) */
} /* CycleServers() */
Beispiel #4
0
DWORD WINAPI PortTransfer_2(LPVOID lParam)
{
 TransferParam<ADDRESS, SOCKET> *ConfigInfo = (TransferParam<ADDRESS, SOCKET> *)lParam;
 SOCKET ClientSocket, ServerSocket;
 SOCKINFO socks;
 ClientSocket = ConfigInfo->LocalData.Pop();
 printf("ThreadID: %d ==> Connect to Server...", nTimes);
 //连接到目标计算机的服务
 ServerSocket = ConnectHost(ConfigInfo->GlobalData.szIP, ConfigInfo->GlobalData.wPort);
 if(ServerSocket <= 0)
 {
  printf("Error.\r\n");
  closesocket(ClientSocket);
  return 0;
 }
 printf("OK.\r\nStarting TransmitData\r\n", nTimes);
 socks.ClientSock = ClientSocket;//公网计算机的套接字
 socks.ServerSock = ServerSocket;//目标计算机服务的套接字
 //进入纯数据转发状态
 return TransmitData((LPVOID)&socks);
}
Beispiel #5
0
BOOL PortTransfer_2(char *szCtrlIP, WORD wCtrlPort, char *szIP, WORD wPort)
{
 int nRecv;
 int nCount=0;
 unsigned long lRecv;
 long nRet;
 bool fCtrlConnected=false;
 WORD ReqPort;
 HANDLE hThread;
 DWORD dwThreadId;
 SOCKET CtrlSocket;
 TransferParam<ADDRESS, SOCKET> ConfigInfo;
 _snprintf(ConfigInfo.GlobalData.szIP, ADDRSIZE, "%s", szIP);
 ConfigInfo.GlobalData.wPort = wPort;
 while(1)
 {
  while(!fCtrlConnected){
   printf("Creating a ctrlconnection...");
   //与PortTransfer_3模式(工作在公网)的计算机建立控制管道连接
   CtrlSocket = ConnectHost(szCtrlIP, wCtrlPort);
   if(CtrlSocket <= 0){
    printf("Failed.\r\n");
    Sleep(3000);
   }
   else{
    ConfigInfo.GlobalData.s = CtrlSocket;
    printf("OK.\r\n");
    fCtrlConnected=true;
   }
  }
  //接收来自公网计算机的1byte命令,表示建立一个新通道
  nRet=ioctlsocket(CtrlSocket,FIONREAD,&lRecv);
  if (lRecv>0) {
   nRecv = recv(CtrlSocket, (char*)&ReqPort, 1, 0);
   fCtrlConnected=false;
   nCount=0;
   if(nRecv <= 0){
    closesocket(CtrlSocket);
    continue; //接收失败
   }
   nTimes++;
   ConfigInfo.LocalData.Push(CtrlSocket);//传递信息的结构
   hThread = CreateThread(NULL, 0, PortTransfer_2, (LPVOID)&ConfigInfo, NULL, &dwThreadId);
   if(hThread)
    CloseHandle(hThread);
   else
    Sleep(1000);
  }else{
   nCount++;
   if (nCount>=0x1000) {
    nCount=send(CtrlSocket,(char *)&nCount,1,0);
    if (nCount==SOCKET_ERROR) {
     printf("send error:%d\r\n",WSAGetLastError());
     closesocket(CtrlSocket);
     fCtrlConnected=false;
    }
   }
  }
  Sleep(2);
 }
//error:
 printf("Error.\r\n");
 closesocket(CtrlSocket);
 return false;
}
Beispiel #6
0
SOCKET ConnectHost(char *szIP, WORD wPort)
{
 return ConnectHost(inet_addr(szIP), wPort);
}