public bool HandleMessage(INetMessage message) { Console.WriteLine($"JoinSessionHandler. PeerId: {message.Client.NetPeer.Id}"); byte[] sessionId = new byte[12]; message.Reader.GetBytes(sessionId, 12); NetDataWriter writer = new NetDataWriter(); writer.Put((byte)NetOperationCode.JoinSession); if (message.Client.CurrentSessionId != null || !SessionCache.Instance.JoinSession(sessionId, message.Client)) { writer.Put((byte)NetErrorCode.SessionConnectedFailed); } else { writer.Put((byte)NetErrorCode.Success); writer.Put(message.Client.Units.Count); foreach (var u in message.Client.Units) { writer.Put(MessageSerializerService.SerializeObjectOfType(u.Value.UnitData)); } } message.Client.NetPeer.Send(writer, DeliveryMethod.ReliableOrdered); return(true); }
public void SendRegisterRequest() { if (Login.text.Length < 6 || Password.text.Length < 6) { Info.text = "Login and password can't be less than 6 symbols"; return; } else if (Login.text.Length > 16 || Password.text.Length > 16) { Info.text = "Login and password can't be more than 16 symbols"; return; } if (Password.text != ConfirmPassword.text) { Info.text = "Passwords don't match"; return; } if (CharacterName.text.Length < 6) { Info.text = "Name of your character can't be less than 6 symbols."; return; } else if (CharacterName.text.Length > 16) { Info.text = "Name of your character can't be more than 16 symbols"; return; } var serializeCharacterData = MessageSerializerService .SerializeObjectOfType <RegisterCharacterData>(new RegisterCharacterData { CharacterName = CharacterName.text, Sex = Sex, CharacterType = CharacterType, Class = Class, SubClass = SubClass }); OperationRequest request = new OperationRequest() { OperationCode = (byte)MessageOperationCode.LoginOperationCode, Parameters = new Dictionary <byte, object> { { PhotonEngine.Instance.SubCodeParameterCode, (int)MessageSubCode.RegisterSubCode }, { (byte)MessageParameterCode.Login, Login.text }, { (byte)MessageParameterCode.Password, Password.text }, { (byte)MessageParameterCode.Email, Email.text }, { (byte)MessageParameterCode.CharacterRegisterData, serializeCharacterData.ToString() } } }; PhotonEngine.Instance.SendRequest(request); }
public void SetPosition(int unitId, Vector3 newPosition) { PositionData positionData = new PositionData(newPosition.x, newPosition.y, newPosition.z); NetDataWriter writer = new NetDataWriter(); writer.Put((byte)NetOperationCode.SetUnitPosition); writer.Put(unitId); writer.Put(MessageSerializerService.SerializeObjectOfType(positionData)); ClientNetEventListener.Instance.SendOperation(writer, DeliveryMethod.ReliableOrdered); }
public void SendNewDestination(Vector3 newDestination) { PositionData positionData = new PositionData(newDestination.x, newDestination.y, newDestination.z); NetDataWriter dataWriter = new NetDataWriter(); dataWriter.Reset(); dataWriter.Put((byte)NetOperationCode.SendUnit); dataWriter.Put(Id); dataWriter.Put(MessageSerializerService.SerializeObjectOfType(positionData)); ClientNetEventListener.Instance.SendOperation(dataWriter, DeliveryMethod.Sequenced); }
private IEnumerator SendMyPosition() { yield return(new WaitForSeconds(0.1f)); PositionData positionData = new PositionData(transform.position.x, transform.position.y, transform.position.z); NetDataWriter dataWriter = new NetDataWriter(); dataWriter.Reset(); dataWriter.Put((byte)NetOperationCode.MoveUnit); dataWriter.Put(Id); dataWriter.Put(MessageSerializerService.SerializeObjectOfType(positionData)); ClientNetEventListener.Instance.SendOperation(dataWriter, DeliveryMethod.Sequenced); StartCoroutine("SendMyPosition"); }
public bool HandleMessage(IMessage message, IServerPeer peer) { // How to prevent hacking? - Proxy server removed all "special" codes from the client, and uses its own when forwarding data var charList = new CharacterMapper().LoadByUserId((int)message.Parameters[(byte)MessageParameterCode.UserId]) .Select(characterDO => new Character { CharacterId = characterDO.Id, Name = characterDO.Name }); // We have a list of characters, Added into a Serializable object var returnResponse = new Response(Code, SubCode, new Dictionary <byte, object>() { { (byte)MessageParameterCode.PeerId, message.Parameters[(byte)MessageParameterCode.PeerId] }, { (byte)MessageParameterCode.Object, MessageSerializerService.SerializeObjectOfType(charList) }, { (byte)MessageParameterCode.SubCodeParameterCode, SubCode } }); peer.SendMessage(returnResponse); return(true); }
public void SendMessage(IMessage message) { if (!message.Parameters.Keys.Contains(Server.SubCodeParameterCode)) { message.Parameters.Add(Server.SubCodeParameterCode, message.SubCode); } switch (message) { case Event _: using (var writer = DarkRiftWriter.Create()) { var parameters = new Dictionary <byte, object>() { { (byte)MessageParameterCode.SubCodeParameterCode, message.SubCode } }; var serializedParams = MessageSerializerService.SerializeObjectOfType(parameters); writer.Write((string)serializedParams); using (var msg = Message.Create(message.Code, writer)) { Client.SendMessage(msg, SendMode.Reliable); } } break; case Response response: using (var writer = DarkRiftWriter.Create()) { var serializedParams = MessageSerializerService.SerializeObjectOfType(response.Parameters); writer.Write((string)serializedParams); writer.Write(response.DebugMessage); writer.Write(response.ReturnCode); using (var msg = Message.Create(message.Code, writer)) { Client.SendMessage(msg, SendMode.Reliable); } } break; } }
public void StartSession(object src, ElapsedEventArgs args) { if (IsStarted) { return; } if (Players.Count != 2) { SessionCache.Instance.DeleteSession(Id); return; } NetDataWriter writer = new NetDataWriter(); writer.Put((byte)NetOperationCode.StartSession); writer.Put(Players.ElementAt(1).Value.Units.Count); foreach (var u in Players.ElementAt(1).Value.Units) { writer.Put(MessageSerializerService.SerializeObjectOfType(u.Value.UnitData)); } Players.ElementAt(0).Value.NetPeer.Send(writer, DeliveryMethod.ReliableOrdered); writer.Reset(); writer.Put((byte)NetOperationCode.StartSession); writer.Put(Players.ElementAt(0).Value.Units.Count); foreach (var u in Players.ElementAt(0).Value.Units) { writer.Put(MessageSerializerService.SerializeObjectOfType(u.Value.UnitData)); } Players.ElementAt(1).Value.NetPeer.Send(writer, DeliveryMethod.ReliableOrdered); IsStarted = true; }