Exemplo n.º 1
0
        public override async Task SelectCharacter(SelectCharacterRequest request, IServerStreamWriter <SelectCharacterReply> responseStream, ServerCallContext context)
        {
            var session = await context.GetSession();

            if (session == null)
            {
                await responseStream.WriteAsync(new SelectCharacterReply()
                {
                    Code = ErrorCode.LostSession
                });

                return;
            }

            bool checkSelectCharacter = await session.SelectCharacter(request.CharacterId);

            if (checkSelectCharacter == false)
            {
                await responseStream.WriteAsync(new SelectCharacterReply()
                {
                    Code = ErrorCode.WrongParam
                });

                return;
            }

            if (request.CharacterId != session.character_type)
            {
                await UserCache.UpdateUserLock(session, session.user_no, session.character_no);
            }

            await session.UpdateSessionLock(request.CharacterId, session.map_id, false);


            await responseStream.WriteAsync(new SelectCharacterReply()
            {
                Code = ErrorCode.Success
            });
        }
Exemplo n.º 2
0
        public static void HandlePacket(byte[] Data, byte Module, PacketType Type, UInt32 Unk01, TORGameClient Client)
        {
            // TODO: Check for packet drop

            IPacket     iPacket = null;
            ClientState State   = Client.State;

            switch (State)
            {
            case ClientState.CONNECTING:
                switch (Type)
                {
                case PacketType.ConnectionHandshake:
                    iPacket = new ConnectionHandshake();
                    break;

                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;

            case ClientState.CONNECTED:
                switch (Type)
                {
                case PacketType.ObjectReply:
                    iPacket = new ObjectReply();
                    break;

                case PacketType.Ping:
                    iPacket = new Ping();
                    break;

                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;

            case ClientState.AUTHED:
                switch (Type)
                {
                case PacketType.CreateCharacterRequest:
                    Log.Write(LogLevel.Warning, "\n{0}", Data.ToHEX());
                    iPacket = new CreateCharacterRequest();
                    break;

                case PacketType.ObjectReply:
                    iPacket = new ObjectReply();
                    break;

                case PacketType.ServiceRequest:
                    iPacket = new ServiceRequest();
                    break;

                case PacketType.RequestClose:
                    iPacket = new RequestClose();
                    break;

                case PacketType.TimeRequesterRequest:
                    iPacket = new TimeRequesterRequest();
                    break;

                case PacketType.HackNotifyData:
                    iPacket = new HackNotifyData();
                    break;

                case PacketType.CMsgC26464A9:
                    iPacket = new CMsgC26464A9();
                    break;

                case PacketType.CMsg7CB9A193:
                    iPacket = new CMsg7CB9A193();
                    break;

                case PacketType.ModulesList:
                    iPacket = new ModulesList();
                    break;

                case PacketType.AreaModulesList:
                    iPacket = new AreaModulesList();
                    break;

                case PacketType.SetTrackingInfo:
                    iPacket = new SetTrackingInfo();
                    break;

                case PacketType.CharacterListRequest:
                    iPacket = new CharacterListRequest();
                    break;

                case PacketType.SelectCharacterRequest:
                    iPacket = new SelectCharacterRequest();
                    break;

                case PacketType.Ping:
                    iPacket = new Ping();
                    break;

                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;

            case ClientState.IN_GAME:
                switch (Type)
                {
                case PacketType.RequestClose:
                    iPacket = new RequestClose();
                    break;

                case PacketType.SetTrackingInfo:
                    iPacket = new SetTrackingInfo();
                    break;

                case PacketType.Ping:
                    iPacket = new Ping();
                    break;

                // TODO: Implement Game Packets
                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;
            }

            if (iPacket != null)
            {
                iPacket.SetClient(Client);
                iPacket.SetBuffers(Data);
                //Log.Write(LogLevel.EDebug, "{0}", Data.ToHEX());
                iPacket.Read();
                iPacket.Run();
            }
        }