private bool HandleConnectedClient(SRSClientSession state, NetworkMessage message) { var srClient = message.Client; if (!_clients.ContainsKey(srClient.ClientGuid)) { var clientIp = (IPEndPoint)state.Socket.RemoteEndPoint; if (message.Version == null) { Logger.Warn("Disconnecting Unversioned Client - " + clientIp.Address + " " + clientIp.Port); state.Disconnect(); return(false); } var clientVersion = Version.Parse(message.Version); var protocolVersion = Version.Parse(UpdaterChecker.MINIMUM_PROTOCOL_VERSION); if (clientVersion < protocolVersion) { Logger.Warn( $"Disconnecting Unsupported Client Version - Version {clientVersion} IP {clientIp.Address} Port {clientIp.Port}"); HandleVersionMismatch(state); //close socket after state.Disconnect(); return(false); } srClient.ClientSession = state; //add to proper list _clients[srClient.ClientGuid] = srClient; state.SRSGuid = srClient.ClientGuid; _eventAggregator.PublishOnUIThread(new ServerStateMessage(true, new List <SRClient>(_clients.Values))); } return(true); }
public void HandleMessage(SRSClientSession state, NetworkMessage message) { try { // logger.Info("Received From " + clientIp.Address + " " + clientIp.Port); // logger.Info("Recevied: " + message.MsgType); switch (message.MsgType) { case NetworkMessage.MessageType.PING: // Do nothing for now break; case NetworkMessage.MessageType.UPDATE: HandleClientMetaDataUpdate(state, message, true); break; case NetworkMessage.MessageType.RADIO_UPDATE: bool showTuned = _serverSettings.GetGeneralSetting(ServerSettingsKeys.SHOW_TUNED_COUNT) .BoolValue; HandleClientMetaDataUpdate(state, message, !showTuned); HandleClientRadioUpdate(state, message, showTuned); break; case NetworkMessage.MessageType.SYNC: var srClient = message.Client; if (!_clients.ContainsKey(srClient.ClientGuid)) { var clientIp = (IPEndPoint)state.Socket.RemoteEndPoint; if (message.Version == null) { _logger.Warn("Disconnecting Unversioned Client - " + clientIp.Address + " " + clientIp.Port); state.Disconnect(); return; } var clientVersion = Version.Parse(message.Version); var protocolVersion = Version.Parse(UpdaterChecker.MINIMUM_PROTOCOL_VERSION); if (clientVersion < protocolVersion) { _logger.Warn( $"Disconnecting Unsupported Client Version - Version {clientVersion} IP {clientIp.Address} Port {clientIp.Port}"); HandleVersionMismatch(state); //close socket after state.Disconnect(); return; } srClient.ClientSession = state; //add to proper list _clients[srClient.ClientGuid] = srClient; state.SRSGuid = srClient.ClientGuid; _eventAggregator.PublishOnUIThread(new ServerStateMessage(true, new List <SRClient>(_clients.Values))); } HandleRadioClientsSync(state, message, srClient); break; case NetworkMessage.MessageType.SERVER_SETTINGS: HandleServerSettingsMessage(); break; case NetworkMessage.MessageType.EXTERNAL_AWACS_MODE_PASSWORD: HandleExternalAWACSModePassword(state, message.ExternalAWACSModePassword, message.Client); break; case NetworkMessage.MessageType.EXTERNAL_AWACS_MODE_DISCONNECT: HandleExternalAWACSModeDisconnect(state, message.Client); break; default: _logger.Warn("Recevied unknown message type"); break; } } catch (Exception ex) { _logger.Error(ex, "Exception Handling Message " + ex.Message); } }