public void Handle(NetConnection sender, SNMessageData messageData) { if (!(sender.Tag is PlayerClient)) { return; } var client = (PlayerClient)sender.Tag; var selectCharacterMessageData = (SelectCharacterMessageData)messageData; if (!IsAccountCharacter(client.PersistentId, selectCharacterMessageData.CharacterId, out Character character)) { return; } var characterSelectedMessageData = new CharacterSelectedMessageData(); characterSelectedMessageData.Character = character; outgoingMessageService.Send(characterSelectedMessageData, sender); var player = new Player(client, character); playerRepository.Add(player); sender.Tag = player; // Send already connected players positions entitiesProcessor.NewPlayerConnected(player); }
public SNMessageData GetMessageData(short type) { ClientMessageTypes header = (ClientMessageTypes)type; SNMessageData message = null; switch (header) { #region Authentification case ClientMessageTypes.PlayerLoginSuccess: message = new PlayerLoginSuccessMessageData(); break; case ClientMessageTypes.PlayerLoginError: message = new PlayerLoginErrorMessageData(); break; case ClientMessageTypes.SendCharacters: message = new SendCharactersMessageData(); break; case ClientMessageTypes.CharacterSelected: message = new CharacterSelectedMessageData(); break; #endregion #region Entities case ClientMessageTypes.EntityPosition: message = new EntityPositionMessageData(); break; case ClientMessageTypes.CharacterDisconnected: message = new CharacterDisconnectedMessageData(); break; #endregion default: loggingService.Log($"Cannot build client message {header.ToString()}", LogMessageType.WARNING); break; } return(message); }