유니티 다크리프트 - 클러스터링 서버 간 메시지 송수신 방법

Changhoony·2022년 9월 22일
0

Unity_DarkRift2_Cluster

목록 보기
4/4

지난 이야기...

Consul을 구성하고 Consul을 다크리프트2 와 연결했다.

여기까지 진행되었다는 가정하에, 서버 간의 통신 방법에 대해 서술하고자 한다.

ConsulServerRegistryConnector.cs 에 FetchServices 함수 내부의 마지막 줄을 보면 JoinRemoteServer(...); 라는 녀석이 있다.

이 녀석 아래에 다음 코드를 삽입한다.

 var allGroups = RemoteServerManager.GetAllGroups();

        if (allGroups.Length == 0) 
            return;

        foreach (var group in allGroups)
        {
        	...Here...
        }

현재 띄워 놓은 원격서버가 있다면 찾아서 이벤트 처리를 해줘야 하기 때문이다.

...here... 부분에는 다음을 추가한다.

 			group.ServerJoined -= OnGroupServerJoined;
            group.ServerLeft -= OnGroupServerLeft;
            group.ServerJoined += OnGroupServerJoined;
            group.ServerLeft += OnGroupServerLeft;

 var allRemoteServers = group.GetAllRemoteServers();

 if(allRemoteServers.Length == 0)
    continue;

 foreach (var remoteServer in allRemoteServers)
 {
 	 ...here2...
 }

여기까지가 cluster.config에 설정한 대로, ServerGroup을 검색하고, 그 다음에 해당 Group에 해당하는 원격서버를 찾는 방식이다. 그리고 나서 ...here2... 서버 간 메시지를 받는 이벤트를 설정하면 된다.

 if (remoteServer.ConnectionState != ConnectionState.Connected) continue;

	remoteServer.ServerConnected -= OnRemoteServerConnected;
    remoteServer.ServerDisconnected -= OnRemoteServerDisconnected; 
    remoteServer.ServerConnected += OnRemoteServerConnected;
    remoteServer.ServerDisconnected += OnRemoteServerDisconnected; // remoteServer.MessageReceived -= 처리 해주기
    remoteServer.MessageReceived -= OnRemoteServerMessageReceived;
    remoteServer.MessageReceived += OnRemoteServerMessageReceived;
                
 
 // 이벤트 작동순서 ServerJoined => ServerConnected > ..사용 중.. > ServerDisconnected > ServerLeft

** 메시지 보내는 함수

// 여기 서버에서 remoteServer(원격) 서버로 메시지를 보낸다.
 SendMessage(remoteServer, Tag, Type , Sendmode ...);
profile
Unity 개발

0개의 댓글