protected override void OnHandleMessage(Dictionary <byte, object> parameters, string debugMessage, int returnCode) { var selectedCharacter = MessageSerializerService.DeserializeObjectOfType <GameCommon.SerializedObjects.Character>( parameters[(byte)MessageParameterCode.Object]); if (selectedCharacter != null) { GameData.Instance.selectedCharacter = selectedCharacter; var characterName = selectedCharacter.Name; var posX = selectedCharacter.Loc_X; var posZ = selectedCharacter.Loc_Z; var posY = Terrain.activeTerrain.terrainData.GetHeight((int)posX, (int)posZ); Vector3 characterPosition = new Vector3(posX, posY, posZ); characterPosition.y = Terrain.activeTerrain.SampleHeight(characterPosition); var characterPrefab = Resources.Load("Hammer Warrior") as GameObject; var obj = Instantiate(characterPrefab, characterPosition, Quaternion.identity); if (obj != null) { var player = obj.AddComponent <Player>(); player.CharacterName = characterName; GameData.Instance.players.Add(player); } Debug.Log("WorldEnterHandler charName:" + characterName); } }
public bool HandleMessage(INetMessage message) { int unitId = message.Reader.GetInt(); var serializePositionData = message.Reader.GetString(); PositionData positionData = MessageSerializerService.DeserializeObjectOfType <PositionData>(serializePositionData); var session = SessionCache.Instance.GetSessionById(message.Client.CurrentSessionId); if (session == null || !session.IsStarted) { return(true); } if (session.Units.ContainsKey(unitId)) { NetDataWriter _dataWriter = new NetDataWriter(); _dataWriter.Reset(); _dataWriter.Put((byte)NetOperationCode.SendUnit); _dataWriter.Put(unitId); _dataWriter.Put(serializePositionData); foreach (var p in session.Players) { session.SendToAll(_dataWriter, DeliveryMethod.Sequenced); } } return(true); }
public bool HandleMessage(INetMessage message) { Console.WriteLine($"SetUnitPositionHandler. PeerId: {message.Client.NetPeer.Id}"); if (message.Client.CurrentSessionId == null) { return(true); } var session = SessionCache.Instance.GetSessionById(message.Client.CurrentSessionId); if (session == null || session.IsStarted) { return(true); } int unitId = message.Reader.GetInt(); PositionData positionData = MessageSerializerService.DeserializeObjectOfType <PositionData>(message.Reader.GetString()); if (session.Units.ContainsKey(unitId)) { session.Units[unitId].UnitData.PositionData = positionData; } return(true); }
protected override void OnHandleMessage(NetDataReader reader) { int unitCount = reader.GetInt(); for (int i = 0; i < unitCount; i++) { UnitData unitData = MessageSerializerService.DeserializeObjectOfType <UnitData>(reader.GetString()); UnitController newUnit = ((GameObject)Instantiate(Resources.Load("Objects/Player"), new Vector3(unitData.PositionData.X, unitData.PositionData.Y, unitData.PositionData.Z), Quaternion.identity)).GetComponent <UnitController>(); NetObject netObject = newUnit.gameObject.GetComponent <NetObject>(); netObject.Id = unitData.UnitId; newUnit.Health = unitData.Health; newUnit.MoveSpeed = unitData.MoveSpeed; newUnit.MinDamage = unitData.MinDamage; newUnit.MaxDamage = unitData.MaxDamage; newUnit.AttackRadius = unitData.AttackRadius; ClientNetEventListener.Instance.NetObjects.Add(unitData.UnitId, netObject); BattleManager.Instance.EnemyUnits.Add(i, newUnit); } BattleManager.Instance.StartSession(); }
/// <summary> /// Handle message. /// </summary> /// <param name="reader">Reader of parameters</param> protected override void OnHandleMessage(NetDataReader reader) { var id = reader.GetInt(); PositionData positionData = MessageSerializerService.DeserializeObjectOfType <PositionData>(reader.GetString()); Vector3 newPosition = new Vector3(positionData.X, positionData.Y, positionData.Z); ClientNetEventListener.Instance.OnMoveEvent(id, newPosition); }
protected override void OnHandleMessage(Dictionary <byte, object> parameters, string debugMessage, int returnCode) { if (returnCode == (short)ReturnCode.Ok) { var region = MessageSerializerService.DeserializeObjectOfType <GameCommon.SerializedObjects.Region>( parameters[(byte)MessageParameterCode.Object]); GameData.Instance.region = region; LoadingScene.imageComp.fillAmount += 0.25f; Debug.LogFormat("Region of character is selected successfully. Your region is {0}", region.Name); } }
private void OnOperationRequest(object sender, MessageReceivedEventArgs e) { Console.WriteLine("Handling operation request"); using (var message = e.GetMessage()) { using (var reader = message.GetReader()) { var parameters = MessageSerializerService.DeserializeObjectOfType <Dictionary <byte, object> >(reader.ReadString()); handlerList.HandleMessage( new Request((byte)e.Tag, parameters.ContainsKey(Server.SubCodeParameterCode) ? (int?)Convert.ToInt32(parameters[Server.SubCodeParameterCode]) : null, parameters), this); } } }
protected override void OnHandleMessage(Dictionary <byte, object> parameters, string debugMessage, int returnCode) { if (returnCode == (short)ReturnCode.Ok) { var listChar = MessageSerializerService.DeserializeObjectOfType <IEnumerable <GameCommon.SerializedObjects.Character> >(parameters[(byte)MessageParameterCode.Object]); var characters = listChar.ToList(); GameData.Instance.characters = characters.ToList(); controller.LoadCharacterListInScene(characters.ToList()); } else { Debug.LogFormat("{0}", debugMessage); } }
protected override void OnHandleMessage(Dictionary <byte, object> parameters, string debugMessage, int returnCode) { if (returnCode == (short)ReturnCode.Ok) { var selectedCharacter = MessageSerializerService.DeserializeObjectOfType <GameCommon.SerializedObjects.Character>( parameters[(byte)MessageParameterCode.Object]); Debug.LogFormat("Character selected successfully. Your character is {0}", selectedCharacter.Name); GameData.Instance.selectedCharacter = selectedCharacter; SceneManager.LoadScene(3); // go back to select character scene } else { Debug.LogFormat("{0}", debugMessage); } }
protected void OnOperationRequest(object sender, MessageReceivedEventArgs e) { var peer = ConnectionCollection.GetPeers <IClientPeer>().FirstOrDefault(c => c.Client == e.Client); subServerHandlerList.Peer = peer; Console.WriteLine("Handling operation request"); using (var message = e.GetMessage()) { using (var reader = message.GetReader()) { var parameters = MessageSerializerService.DeserializeObjectOfType <Dictionary <byte, object> >(reader.ReadString()); subServerHandlerList.HandleMessage(new Request((byte)e.Tag, parameters.ContainsKey(SubCodeParameterCode) ? (int?)Convert.ToInt32(parameters[SubCodeParameterCode]) : null, parameters), this); } } }
public bool HandleMessage(INetMessage message) { int unitId = message.Reader.GetInt(); var serializePositionData = message.Reader.GetString(); PositionData positionData = MessageSerializerService.DeserializeObjectOfType <PositionData>(serializePositionData); var session = SessionCache.Instance.GetSessionById(message.Client.CurrentSessionId); if (session == null || !session.IsStarted) { return(true); } if (session.Units.ContainsKey(unitId)) { session.Units[unitId].UnitData.PositionData = positionData; } return(true); }
/// <summary> /// Handle message. /// </summary> /// <param name="reader">Reader of parameters</param> protected override void OnHandleMessage(NetDataReader reader) { NetErrorCode errorCode = (NetErrorCode)reader.GetByte(); if (errorCode == NetErrorCode.SessionConnectedFailed) { Debug.Log("Session connected failed"); return; } int unitCount = reader.GetInt(); for (int i = 0; i < unitCount; i++) { UnitData unitData = MessageSerializerService.DeserializeObjectOfType <UnitData>(reader.GetString()); UnitController newUnit = ((GameObject)Instantiate(Resources.Load("Objects/Player"), new Vector3(unitData.PositionData.X, unitData.PositionData.Y, unitData.PositionData.Z), Quaternion.identity)).GetComponent <UnitController>(); NetObject netObject = newUnit.gameObject.GetComponent <NetObject>(); netObject.Id = unitData.UnitId; netObject.IsMine = true; newUnit.Health = unitData.Health; newUnit.MoveSpeed = unitData.MoveSpeed; newUnit.MinDamage = unitData.MinDamage; newUnit.MaxDamage = unitData.MaxDamage; newUnit.AttackRadius = unitData.AttackRadius; ClientNetEventListener.Instance.NetObjects.Add(unitData.UnitId, netObject); BattleManager.Instance.PlayerUnits.Add(i, newUnit); } BattleManager.Instance.JoinSessionSuccess(); }
public bool HandleMessage(IMessage message, IServerPeer peer) { var serverPeer = peer as PhotonServerPeer; var operation = new RegisterOperation(serverPeer.protocol, message); if (!operation.IsValid) { peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, operation.GetErrorMessage(), (int)ReturnCode.OperationInvalid)); return(true); } if (operation.Login.Length < 6 || operation.Password.Length < 6) { peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, "Login and password can't be less than 6 symbols.", (int)ReturnCode.OperationInvalid)); return(true); } else if (operation.Login.Length > 16 || operation.Password.Length > 16) { peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, "Login and password can't be more than 16 symbols.", (int)ReturnCode.OperationInvalid)); return(true); } var checkMail = new EmailAddressAttribute(); if (!checkMail.IsValid(operation.Email)) { peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, "Email address incorrect.", (int)ReturnCode.OperationInvalid)); return(true); } var characterData = MessageSerializerService.DeserializeObjectOfType <RegisterCharacterData>( operation.CharacterRegisterData); characterData.CharacterType = 1; // delete this if we add more types if (characterData.CharacterName.Length < 6) { peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, "Name of your character can't be less than 6 symbols.", (int)ReturnCode.OperationInvalid)); return(true); } else if (characterData.CharacterName.Length > 16) { peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, "Name of your can't be more than 16 symbols.", (int)ReturnCode.OperationInvalid)); return(true); } else if (characterData.Sex != "Male" && characterData.Sex != "Female") { return(true); } else if (characterData.CharacterType != 1) // add more types { return(true); } else if (characterData.Class != "Warrior" && characterData.Class != "Rogue" && characterData.Class != "Mage") { return(true); } else if (characterData.SubClass != "Warlock" && characterData.SubClass != "Cleric") { return(true); } try { using (var session = NHibernateHelper.OpenSession()) { using (var transaction = session.BeginTransaction()) { var accounts = session.QueryOver <AccountModel>().Where(a => a.Login == operation.Login).List(); var accountsByEmail = session.QueryOver <AccountModel>().Where(a => a.Email == operation.Email).List(); var characters = session.QueryOver <CharacterModel>().Where(c => c.Name == characterData.CharacterName).List(); if (accounts.Count > 0) { transaction.Commit(); peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, "Login already taken.", (int)ReturnCode.AlreadyExist)); return(true); } else if (accountsByEmail.Count > 0) { transaction.Commit(); peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, "Email already taken.", (int)ReturnCode.AlreadyExist)); return(true); } else if (characters.Count > 0) { transaction.Commit(); peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, "Name already taken.", (int)ReturnCode.AlreadyExist)); return(true); } string salt = Guid.NewGuid().ToString().Replace("-", ""); AccountModel newAccount = new AccountModel() { Login = operation.Login, Password = BitConverter.ToString(SHA512.Create().ComputeHash( Encoding.UTF8.GetBytes(salt + operation.Password))).Replace("-", ""), Salt = salt, Email = operation.Email, AdminLevel = 0, BanLevel = 0, Created = DateTime.Now, Updated = DateTime.Now }; session.Save(newAccount); transaction.Commit(); Log.DebugFormat("Create new Account. Login - {0}.", operation.Login); } using (var transaction = session.BeginTransaction()) { var accounts = session.QueryOver <AccountModel>().Where(a => a.Login == operation.Login).SingleOrDefault(); CharacterModel newCharacter = new CharacterModel() { AccountId = accounts, Name = characterData.CharacterName, Sex = characterData.Sex, CharacterType = characterData.CharacterType, Class = characterData.Class, SubClass = characterData.SubClass, Level = 1, Exp = 0, Strength = 1, Intellect = 1, RangLevel = 0, Gold = 10000, Donate = 0, SkillPoint = 1000, StatPoint = 0, InventorySize = 32, GuildId = 0, Created = DateTime.Now, Updated = DateTime.Now }; session.Save(newCharacter); transaction.Commit(); Log.DebugFormat("Create new Character. Name - {0}.", characterData.CharacterName); } peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, "Register success.", (int)ReturnCode.OK)); } return(true); } catch (Exception ex) { Log.ErrorFormat("Error register handler: {0}", ex); peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }, { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] }, }, ex.ToString(), (int)ReturnCode.OperationDenied)); return(true); } }