コード例 #1
0
        /// <summary>
        /// Обработать полученное игровое сообщение
        /// </summary>
        /// <param name="incomingMsg">Входящее сообщение</param>
        public async Task ProcessMessage(IncomingMessage incomingMsg)
        {
            bool needScriptProcessing = true;

            if (incomingMsg is ClientInitialized)
            {
                // Оповестить всех клиентов о новом подключении
                var newPlayer = session.GetPlayerById(incomingMsg.SenderId);
                newPlayer.IsActive = true;
                var notifyMsg = new ClientConnected(newPlayer);
                await msgSender.BroadcastMessage(session, notifyMsg);
            }
            else if (incomingMsg is WebRtcMessage rtcMessage)
            {
                // Передать сообщение WebRTC целевому клиенту
                await msgSender.SendMessage(rtcMessage.TargetId, rtcMessage);

                needScriptProcessing = false;
            }

            // Отправить сообщение на обработку скриптом игры
            if (needScriptProcessing)
            {
                session.ProcessGameMessage(incomingMsg);
            }
        }
コード例 #2
0
        // После подключения Tcp клиент шлет свое имя, чтобы его как то идентифицироваль остальные пользователи
        // Этот метод обрабатывает эту ситуацию
        private void OnSetName(NameSet nameSetMessage)
        {
            if (string.IsNullOrWhiteSpace(nameSetMessage.Name))
            {
                return;
            }

            Name = nameSetMessage.Name;

            RefreshLiveCycle();

            // посылаем сообщение о входе в чат всем подключенным пользователям
            _sender.BroadcastMessage(new UserNetworkEvent(Id, Name, NetworkEvent.Connect).ToString(), Id);

            _sender.SendOnlineUsers(Id);
        }