지난번에 언리얼 클라이언트에 protobuf를 추가하고 빌드와 간단한 테스트까지 해봤다.

이번에는 내가 만든 게임서버에 연결을 하고, 통신을 주고받아보자. (일단 평문통신으로)


언리얼 내장 소켓통신 라이브러리를 사용하기 위해 Client.Build.cs 에 모듈을 추가한다.

using UnrealBuildTool;
using System.IO;

public class Client : ModuleRules
{
	public Client(ReadOnlyTargetRules Target) : base(Target)
	{
    		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
    
    		PublicDependencyModuleNames.AddRange(new string[]
    		{
    			"Core",
    			"CoreUObject",
    			"Engine",
    			"InputCore",
    			"EnhancedInput",
			    "Sockets", // 추가됨
			    "Networking" // 추가됨
    		});
            /*...*/
    	}
}

 

 

언리얼 에디터에서 ClientGameInstance 생성

이름은 ClientgameInstance로 지었다.

 

ClientGameInstance.h

UCLASS()
class CLIENT_API UClientGameInstance : public UGameInstance
{
	GENERATED_BODY()

public:
	UFUNCTION(BlueprintCallable)
	void ConnectToGameServer();

	UFUNCTION(BlueprintCallable)
	void DisconnectFromGameServer();

public:
	class FSocket* Socket;
	FString IpAddress = TEXT("127.0.0.1");
	int16 Port = 7777;
};

 

ClientGameInstance.cpp

#include "ClientGameInstance.h"
#include "Sockets.h"
#include "Common/TcpSocketBuilder.h"
#include "Serialization/ArrayWriter.h"
#include "SocketSubsystem.h"

void UClientGameInstance::ConnectToGameServer()
{
	Socket = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateSocket(TEXT("Stream"),TEXT("Client Socket"));

	FIPv4Address Ip;
	FIPv4Address::Parse(IpAddress, Ip);

	TSharedRef<FInternetAddr> InternetAddr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->CreateInternetAddr();
	InternetAddr->SetIp(Ip.Value);
	InternetAddr->SetPort(Port);

	GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Connecting To Server"));

	bool Connected = Socket->Connect(*InternetAddr);

	if (Connected)
	{
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Connection Successed"));
		// Session 
	}
	else
	{
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Connection Failed"));
	}
}

void UClientGameInstance::DisconnectFromGameServer()
{
	if (Socket)
	{
		ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get();
		SocketSubsystem->DestroySocket(Socket);
		Socket = nullptr;
	}
}

 

언리얼 에디터 프로젝트 세팅- gameinstance를 우리가 만든걸로 설정

 

그리고 레벨 블루프린트를 열고 아래와 같이 설정한다.

 

이제 게임서버를 실행시킨 뒤에 연결을 해보자. (더미클라이언트는 빼고 실행했다.)

서버측(좌)에서도 새 session이 생성됐고, 언리얼 클라이언트 측에서도 성공적으로 연결됐다고 뜬다.


 

현재까지의 git 버전

클라이언트

 

Feat: ClientGameInstance · Dodontak/Project_Island_Client@81a0088

게임 인스턴스를 추가해 서버와 연결되도록 만듦.

github.com

서버

서버는 바뀐건 없고 그냥 솔루션 속성에서 더미 클라이언트를 시작하지 않게만 만들어줬다.

 

+ Recent posts