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 ...);