Esempio n. 1
0
        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);
        }
Esempio n. 2
0
    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");
    }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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;
            }
        }
Esempio n. 8
0
        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;
        }