diff --git a/Programs/Simian/Extensions/Chat.cs b/Programs/Simian/Extensions/Chat.cs index f44fbc8b..95c0f856 100644 --- a/Programs/Simian/Extensions/Chat.cs +++ b/Programs/Simian/Extensions/Chat.cs @@ -36,8 +36,8 @@ namespace Simian.Extensions ChatFromSimulatorPacket chat = new ChatFromSimulatorPacket(); chat.ChatData.Audible = (byte)ChatAudibleLevel.Fully; chat.ChatData.ChatType = viewerChat.ChatData.Type; - chat.ChatData.OwnerID = agent.ID; - chat.ChatData.SourceID = agent.ID; + chat.ChatData.OwnerID = agent.AgentID; + chat.ChatData.SourceID = agent.AgentID; chat.ChatData.SourceType = (byte)ChatSourceType.Agent; chat.ChatData.Position = agent.Avatar.Position; chat.ChatData.FromName = Utils.StringToBytes(agent.Avatar.Name); diff --git a/Programs/Simian/Extensions/ConnectionManagement.cs b/Programs/Simian/Extensions/ConnectionManagement.cs index b3c0a31c..00a1153b 100644 --- a/Programs/Simian/Extensions/ConnectionManagement.cs +++ b/Programs/Simian/Extensions/ConnectionManagement.cs @@ -17,6 +17,7 @@ namespace Simian { server.UDPServer.RegisterPacketCallback(PacketType.UseCircuitCode, new UDPServer.PacketCallback(UseCircuitCodeHandler)); server.UDPServer.RegisterPacketCallback(PacketType.StartPingCheck, new UDPServer.PacketCallback(StartPingCheckHandler)); + server.UDPServer.RegisterPacketCallback(PacketType.LogoutRequest, new UDPServer.PacketCallback(LogoutRequestHandler)); } @@ -66,5 +67,22 @@ namespace Simian agent.SendPacket(complete); } + + void LogoutRequestHandler(Packet packet, Agent agent) + { + LogoutRequestPacket request = (LogoutRequestPacket)packet; + + LogoutReplyPacket reply = new LogoutReplyPacket(); + reply.AgentData.AgentID = agent.AgentID; + reply.AgentData.SessionID = agent.SessionID; + reply.InventoryData = new LogoutReplyPacket.InventoryDataBlock[0]; + + lock (server.Agents) + { + if (server.Agents.ContainsKey(agent.Address)) + server.Agents.Remove(agent.Address); + } + } + } }