UE4聯網筆記(一)

FSocket創建創建的相關代碼

	FScopeLock ScopeLock(m_MsgHandlerStartLock);        //線程鎖
	if (m_Connect)
		return true;

	ISocketSubsystem* g_socketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM);        
	if (g_socketSubsystem == NULL)
		return 1;
	m_Socket = g_socketSubsystem->CreateSocket(NAME_Stream, TEXT("remote game server connection"));                                           //創建連接
	if (m_Socket == NULL)
		return  2;

	//FSocketBSD* SocketBSD = Cast<FSocketBSD>(m_Socket);
	//if (SocketBSD) {
	m_Socket->SetNagle(false);                            //Nagle算法
	//}

	bool IpIsValid = false;
	TSharedRef<FInternetAddr> ServerAddress = g_socketSubsystem->CreateInternetAddr();
	ServerAddress->SetIp(*m_LogicServerIp, IpIsValid);
	ServerAddress->SetPort(m_LogicServerPort);
	clock_t start, ends;
	start = clock();
	UE_LOG(LogMemory, Log, TEXT("mf   TcpClientUE::Run start %ld"), start);
	bool bIsValid = m_Socket->Connect(*ServerAddress);
	ends = clock();
	UE_LOG(LogMemory, Log, TEXT("mf   TcpClientUE::Run end %ld   bIsValid=%d"), (ends - start) , bIsValid);

	//FString TempString = FString::Printf(TEXT("Connect ServerAddress : %s %d %d %d"),
	//	*m_LogicServerIp,
	//	m_LogicServerPort,
	//	bIsValid,
	//	m_FirstConnect);                                //輸出信息
	//GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, TempString);

	if (bIsValid) {
		m_Connect = true;
		if (m_FirstConnect) {
			ReceiverUE::GetInstance().Start();
			SenderUE::GetInstance().Start();
		}
		m_FirstConnect = false;
		//UWorldClient::GetInstance().NotifyNetStateChangeEvent(1);
	}
	else {
		m_Connect = false;
		UWorldClient::GetInstance().SetNetError(faith::e_logout_result_net_lost);
	}
	ULoginClient::GetInstance().m_SendMsgError = "";
	return (bIsValid ? 0 : 3);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章