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 }); }
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(); } }