public override void OnServerReceive(TransportEventData eventData) { CentralServerPeerInfo tempPeerInfo; switch (eventData.type) { case ENetworkEvent.ConnectEvent: Logging.Log(LogTag, "OnPeerConnected peer.ConnectionId: " + eventData.connectionId); ConnectionIds.Add(eventData.connectionId); break; case ENetworkEvent.DataEvent: ReadPacket(eventData.connectionId, eventData.reader); break; case ENetworkEvent.DisconnectEvent: Logging.Log(LogTag, "OnPeerDisconnected peer.ConnectionId: " + eventData.connectionId + " disconnectInfo.Reason: " + eventData.disconnectInfo.Reason); ConnectionIds.Remove(eventData.connectionId); // Remove disconnect map spawn server MapSpawnServerPeers.Remove(eventData.connectionId); // Remove disconnect map server if (MapServerPeers.TryGetValue(eventData.connectionId, out tempPeerInfo)) { MapServerPeersByMapId.Remove(tempPeerInfo.extra); MapServerPeersByInstanceId.Remove(tempPeerInfo.extra); MapServerPeers.Remove(eventData.connectionId); RemoveMapUsers(eventData.connectionId); } break; case ENetworkEvent.ErrorEvent: Logging.LogError(LogTag, "OnPeerNetworkError endPoint: " + eventData.endPoint + " socketErrorCode " + eventData.socketError + " errorMessage " + eventData.errorMessage); break; } }
protected override void OnStopServer() { base.OnStopServer(); MapUsersByCharacterId.Clear(); ConnectionIdsByCharacterId.Clear(); ConnectionIdsByCharacterName.Clear(); MapSpawnServerPeers.Clear(); MapServerPeers.Clear(); MapServerPeersByMapId.Clear(); MapServerPeersByInstanceId.Clear(); }
private async UniTaskVoid HandleRequestAppServerAddress( RequestHandlerData requestHandler, RequestAppServerAddressMessage request, RequestProceedResultDelegate <ResponseAppServerAddressMessage> result) { long connectionId = requestHandler.ConnectionId; UITextKeys message = UITextKeys.NONE; CentralServerPeerInfo peerInfo = new CentralServerPeerInfo(); switch (request.peerType) { // TODO: Balancing servers when there are multiple servers with same type case CentralServerPeerType.MapSpawnServer: if (MapSpawnServerPeers.Count > 0) { peerInfo = MapSpawnServerPeers.Values.First(); Logging.Log(LogTag, "Request Map Spawn Address: [" + connectionId + "]"); } else { message = UITextKeys.UI_ERROR_SERVER_NOT_FOUND; Logging.Log(LogTag, "Request Map Spawn Address: [" + connectionId + "] [" + message + "]"); } break; case CentralServerPeerType.MapServer: string mapName = request.extra; if (!MapServerPeersByMapId.TryGetValue(mapName, out peerInfo)) { message = UITextKeys.UI_ERROR_SERVER_NOT_FOUND; Logging.Log(LogTag, "Request Map Address: [" + connectionId + "] [" + mapName + "] [" + message + "]"); } break; case CentralServerPeerType.InstanceMapServer: string instanceId = request.extra; if (!MapServerPeersByInstanceId.TryGetValue(instanceId, out peerInfo)) { message = UITextKeys.UI_ERROR_SERVER_NOT_FOUND; Logging.Log(LogTag, "Request Map Address: [" + connectionId + "] [" + instanceId + "] [" + message + "]"); } break; } // Response result.Invoke( message == UITextKeys.NONE ? AckResponseCode.Success : AckResponseCode.Error, new ResponseAppServerAddressMessage() { message = message, peerInfo = peerInfo, }); await UniTask.Yield(); }
private async UniTaskVoid HandleRequestAppServerRegister( RequestHandlerData requestHandler, RequestAppServerRegisterMessage request, RequestProceedResultDelegate <ResponseAppServerRegisterMessage> result) { long connectionId = requestHandler.ConnectionId; UITextKeys message = UITextKeys.NONE; if (request.ValidateHash()) { CentralServerPeerInfo peerInfo = request.peerInfo; peerInfo.connectionId = connectionId; switch (request.peerInfo.peerType) { case CentralServerPeerType.MapSpawnServer: MapSpawnServerPeers[connectionId] = peerInfo; Logging.Log(LogTag, "Register Map Spawn Server: [" + connectionId + "]"); break; case CentralServerPeerType.MapServer: // Extra is map ID if (!MapServerPeersByMapId.ContainsKey(peerInfo.extra)) { BroadcastAppServers(connectionId, peerInfo); // Collects server data MapServerPeersByMapId[peerInfo.extra] = peerInfo; MapServerPeers[connectionId] = peerInfo; Logging.Log(LogTag, "Register Map Server: [" + connectionId + "] [" + peerInfo.extra + "]"); } else { message = UITextKeys.UI_ERROR_MAP_EXISTED; Logging.Log(LogTag, "Register Map Server Failed: [" + connectionId + "] [" + peerInfo.extra + "] [" + message + "]"); } break; case CentralServerPeerType.InstanceMapServer: // Extra is instance ID if (!MapServerPeersByInstanceId.ContainsKey(peerInfo.extra)) { BroadcastAppServers(connectionId, peerInfo); // Collects server data MapServerPeersByInstanceId[peerInfo.extra] = peerInfo; MapServerPeers[connectionId] = peerInfo; Logging.Log(LogTag, "Register Instance Map Server: [" + connectionId + "] [" + peerInfo.extra + "]"); } else { message = UITextKeys.UI_ERROR_EVENT_EXISTED; Logging.Log(LogTag, "Register Instance Map Server Failed: [" + connectionId + "] [" + peerInfo.extra + "] [" + message + "]"); } break; } } else { message = UITextKeys.UI_ERROR_INVALID_SERVER_HASH; Logging.Log(LogTag, "Register Server Failed: [" + connectionId + "] [" + message + "]"); } // Response result.Invoke( message == UITextKeys.NONE ? AckResponseCode.Success : AckResponseCode.Error, new ResponseAppServerRegisterMessage() { message = message, }); await UniTask.Yield(); }