Beispiel #1
0
        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);
            }
        }