/// <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); } }
// После подключения 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); }