/// <summary> /// Sends the specified message. /// </summary> /// <param name="Message">The message.</param> public void SendMessage(Message Message) { Logging.Info(typeof(NetworkTcp), "Sending " + Message.GetType().Name + "."); if (this.Device.Token.IsConnected) { if (Message.IsServerToClientMessage) { Message.Encode(); byte[] Bytes = Message.Stream.ToArray(); if (this.SendEncrypter == null) { if (this.PepperInit.State > 0) { if (this.PepperInit.State == 1) { Bytes = PepperCrypto.SendPepperAuthentificationResponse(ref this.PepperInit, Bytes); } else { if (this.PepperInit.State == 3) { Bytes = PepperCrypto.SendPepperLoginResponse(ref this.PepperInit, out this.SendEncrypter, out this.ReceiveEncrypter, Bytes); } } } } else { Bytes = this.SendEncrypter.Encrypt(Bytes); } Message.Stream.SetByteArray(Bytes); NetworkTcp.Send(this.WriteHeader(Message), this.Device.Token); HandlerFactory.MessageHandle(this.Device, Message); // TODO : Probably call Task.Wait(). } else { Logging.Error(this.GetType(), "Message.IsServerToClientMessage != true at SendMessage(Message " + Message.Type + ")."); } } }
/// <summary> /// Sends the specified message. /// </summary> /// <param name="Message">The message.</param> public void SendMessage(Message Message) { Logging.Info(typeof(NetworkTcp), "Sending " + Message.GetType().Name + " to " + this.Device.Token.Socket.RemoteEndPoint + "."); if (this.Device.Token.IsConnected) { // Message.Encode(); byte[] Bytes = Message.Stream.ToArray(); if (this.SendEncrypter == null) { if (this.PepperInit.State > 0) { if (this.PepperInit.State == 1) { Bytes = PepperCrypto.SendPepperAuthentificationResponse(ref this.PepperInit, Bytes); } else { if (this.PepperInit.State == 3) { Bytes = PepperCrypto.SendPepperLoginResponse(ref this.PepperInit, out this.SendEncrypter, out this.ReceiveEncrypter, Bytes); } } } } else { Bytes = this.SendEncrypter.Encrypt(Bytes); } Message.Stream.SetByteArray(Bytes); Logging.Info(this.GetType(), BitConverter.ToString(Message.ToBytes)); NetworkTcp.Send(Message.ToBytes, this.Device.Token); HandlerFactory.MessageHandle(this.Device, Message).Wait(); } }
/// <summary> /// Receives the message. /// </summary> public void ReceiveMessage(short Type, short Version, byte[] Packet) { if (this.ReceiveEncrypter == null) { if (this.PepperInit.State == 0) { if (Type == 10101) { this.SendEncrypter = new Rc4Encrypter("fhsd6f86f67rt8fw78fw789we78r9789wer6re", "nonce"); this.ReceiveEncrypter = new Rc4Encrypter("fhsd6f86f67rt8fw78fw789we78r9789wer6re", "nonce"); Packet = this.ReceiveEncrypter.Decrypt(Packet); } else if (Type == 10100) { Packet = PepperCrypto.HandlePepperAuthentification(ref this.PepperInit, Packet); } else { Packet = null; } } else { if (this.PepperInit.State == 2) { Packet = Type == 10101 ? PepperCrypto.HandlePepperLogin(ref this.PepperInit, Packet) : null; } else { Packet = null; } } } else { Packet = this.ReceiveEncrypter.Decrypt(Packet); } if (Packet != null) { using (ByteStream Stream = new ByteStream(Packet)) { Message Message = MessageFactory.CreateMessage(Type, Stream); if (Message != null) { Logging.Info(this.GetType(), "Receiving " + Message.GetType().Name + " from " + this.Device.Token.Socket.RemoteEndPoint + "."); try { Message.Decode(); } catch (Exception Exception) { Logging.Error(this.GetType(), "ReceiveMessage() - An error has been throwed when the message type " + Message.Type + " has been processed. " + Exception); } HandlerFactory.MessageHandle(this.Device, Message).Wait(); } else { // Logging.Info(this.GetType(), BitConverter.ToString(Stream.ReadBytes(Stream.BytesLeft))); Message = new Message(Stream) { _Identifier = Type, Version = Version }; } Logging.Info(this.GetType(), BitConverter.ToString(Message.ToBytes)); Device.GameListener.SendMessage(Message); } } else { if (this.Device.State == State.Logged) { Logging.Error(this.GetType(), "Packet == null at ReceiveMessage()."); } } }
/// <summary> /// Receives the message. /// </summary> public void ReceiveMessage(short Type, short Version, byte[] Packet) { if (this.ReceiveEncrypter == null) { if (this.PepperInit.State == 0) { if (Type == 10101) { this.SendEncrypter = new Rc4Encrypter("fhsd6f86f67rt8fw78fw789we78r9789wer6re", "nonce"); this.ReceiveEncrypter = new Rc4Encrypter("fhsd6f86f67rt8fw78fw789we78r9789wer6re", "nonce"); Packet = this.ReceiveEncrypter.Decrypt(Packet); } else if (Type == 10100) { Packet = PepperCrypto.HandlePepperAuthentification(ref this.PepperInit, Packet); } else { Packet = null; } } else { if (this.PepperInit.State == 2) { Packet = Type == 10101 ? PepperCrypto.HandlePepperLogin(ref this.PepperInit, Packet) : null; } else { Packet = null; } } } else { Packet = this.ReceiveEncrypter.Decrypt(Packet); } if (Packet != null) { if (this.Device.State != State.Logged) { if (Type != 10100 && Type != 10101) { if (++this.InvalidMessageStateCnt >= 5) { NetworkTcp.Disconnect(this.Device.Token.AsyncEvent); } return; } } using (ByteStream Stream = new ByteStream(Packet)) { Message Message = MessageFactory.CreateMessage(Type, Stream); if (Message != null) { Logging.Info(this.GetType(), "Receiving " + Message.GetType().Name + "."); if (this.RequestTime.CanHandleMessage(Message)) { try { Message.Decode(); } catch (Exception Exception) { Logging.Error(this.GetType(), "ReceiveMessage() - An error has been throwed when the message type " + Message.Type + " has been processed. " + Exception); } HandlerFactory.MessageHandle(this.Device, Message); // TODO : Probably call Task.Wait(). } } else { Logging.Info(this.GetType(), BitConverter.ToString(Stream.ReadBytes(Stream.BytesLeft))); } } } else { if (this.Device.State == State.Logged) { Logging.Error(this.GetType(), "Packet == null at ReceiveMessage()."); } } }