From 64f9f03e9a3cb345ef85e1990bebc3a7cca41c9e Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 24 Oct 2008 23:04:55 +0000 Subject: Plumb some more --- .../Region/ClientStack/LindenUDP/LLClientView.cs | 170 ++++++++++++++++++--- 1 file changed, 148 insertions(+), 22 deletions(-) (limited to 'OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs') diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index b517c13..d40faac 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -273,6 +273,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP private MapItemRequest handlerMapItemRequest = null; + private IGroupsModule m_GroupsModule = null; + //private TerrainUnacked handlerUnackedTerrain = null; //** @@ -411,6 +413,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP AuthenticateResponse sessionInfo, UUID agentId, UUID sessionId, uint circuitCode, EndPoint proxyEP, ClientStackUserSettings userSettings) { + m_GroupsModule = scene.RequestModuleInterface(); m_moneyBalance = 1000; m_channelVersion = Utils.StringToBytes(scene.GetSimulatorVersion()); @@ -6286,10 +6289,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP //m_log.Warn("[CLIENT]: unhandled ViewerStats packet"); break; - case PacketType.CreateGroupRequest: - // TODO: handle this packet - //m_log.Warn("[CLIENT]: unhandled CreateGroupRequest packet"); - break; //case PacketType.GenericMessage: // TODO: handle this packet //m_log.Warn("[CLIENT]: unhandled GenericMessage packet"); @@ -6462,10 +6461,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP case PacketType.ActivateGroup: ActivateGroupPacket activateGroupPacket = (ActivateGroupPacket)Pack; - IGroupsModule grps = m_scene.RequestModuleInterface(); - if (grps != null) + if (m_GroupsModule != null) { - grps.ActivateGroup(this, activateGroupPacket.AgentData.GroupID); + m_GroupsModule.ActivateGroup(this, activateGroupPacket.AgentData.GroupID); + m_GroupsModule.SendAgentGroupDataUpdate(this); } break; @@ -6473,8 +6472,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP GroupTitlesRequestPacket groupTitlesRequest = (GroupTitlesRequestPacket)Pack; - IGroupsModule grps2 = m_scene.RequestModuleInterface(); - if (grps2 != null) + if (m_GroupsModule != null) { GroupTitlesReplyPacket groupTitlesReply = (GroupTitlesReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupTitlesReply); @@ -6489,7 +6487,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP groupTitlesRequest.AgentData.RequestID; List titles = - grps2.GroupTitlesRequest(this, + m_GroupsModule.GroupTitlesRequest(this, groupTitlesRequest.AgentData.GroupID); groupTitlesReply.GroupData = @@ -6520,8 +6518,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP GroupProfileRequestPacket groupProfileRequest = (GroupProfileRequestPacket)Pack; - IGroupsModule grps3 = m_scene.RequestModuleInterface(); - if (grps3 != null) + if (m_GroupsModule != null) { GroupProfileReplyPacket groupProfileReply = (GroupProfileReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupProfileReply); @@ -6529,7 +6526,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP groupProfileReply.GroupData = new GroupProfileReplyPacket.GroupDataBlock(); groupProfileReply.AgentData.AgentID = AgentId; - GroupProfileData d = grps3.GroupProfileRequest(this, + GroupProfileData d = m_GroupsModule.GroupProfileRequest(this, groupProfileRequest.GroupData.GroupID); groupProfileReply.GroupData.GroupID = d.GroupID; @@ -6557,11 +6554,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP GroupMembersRequestPacket groupMembersRequestPacket = (GroupMembersRequestPacket)Pack; - IGroupsModule grps4 = m_scene.RequestModuleInterface(); List members = - grps4.GroupMembersRequest(this, groupMembersRequestPacket.GroupData.GroupID); + m_GroupsModule.GroupMembersRequest(this, groupMembersRequestPacket.GroupData.GroupID); - if (grps4 != null) + if (m_GroupsModule != null) { GroupMembersReplyPacket groupMembersReply = (GroupMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupMembersReply); @@ -6608,8 +6604,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP GroupRoleDataRequestPacket groupRolesRequest = (GroupRoleDataRequestPacket)Pack; - IGroupsModule grps5 = m_scene.RequestModuleInterface(); - if (grps5 != null) + if (m_GroupsModule != null) { GroupRoleDataReplyPacket groupRolesReply = (GroupRoleDataReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupRoleDataReply); @@ -6629,7 +6624,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP groupRolesRequest.GroupData.RequestID; List titles = - grps5.GroupRoleDataRequest(this, + m_GroupsModule.GroupRoleDataRequest(this, groupRolesRequest.GroupData.GroupID); groupRolesReply.GroupData.RoleCount = @@ -6670,8 +6665,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP GroupRoleMembersRequestPacket groupRoleMembersRequest = (GroupRoleMembersRequestPacket)Pack; - IGroupsModule grps6 = m_scene.RequestModuleInterface(); - if (grps6 != null) + if (m_GroupsModule != null) { GroupRoleMembersReplyPacket groupRoleMembersReply = (GroupRoleMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupRoleMembersReply); groupRoleMembersReply.AgentData = @@ -6684,7 +6678,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP groupRoleMembersRequest.GroupData.RequestID; List mappings = - grps6.GroupRoleMembersRequest(this, + m_GroupsModule.GroupRoleMembersRequest(this, groupRoleMembersRequest.GroupData.GroupID); groupRoleMembersReply.AgentData.TotalPairs = @@ -6713,6 +6707,108 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; + case PacketType.CreateGroupRequest: + CreateGroupRequestPacket createGroupRequest = + (CreateGroupRequestPacket)Pack; + + if (m_GroupsModule != null) + { + CreateGroupReplyPacket createGroupReply = (CreateGroupReplyPacket)PacketPool.Instance.GetPacket(PacketType.CreateGroupReply); + + createGroupReply.AgentData = + new CreateGroupReplyPacket.AgentDataBlock(); + createGroupReply.ReplyData = + new CreateGroupReplyPacket.ReplyDataBlock(); + + createGroupReply.AgentData.AgentID = AgentId; + createGroupReply.ReplyData.GroupID = UUID.Zero; + + IMoneyModule money = m_scene.RequestModuleInterface(); + if (money != null && !money.GroupCreationCovered(this)) + { + createGroupReply.ReplyData.Success = false; + createGroupReply.ReplyData.Message = Utils.StringToBytes("You do not have sufficient funds to create a group"); + OutPacket(createGroupReply, ThrottleOutPacketType.Task); + break; + } + + UUID groupID = m_GroupsModule.CreateGroup(this, + Utils.BytesToString(createGroupRequest.GroupData.Name), + Utils.BytesToString(createGroupRequest.GroupData.Charter), + createGroupRequest.GroupData.ShowInList, + createGroupRequest.GroupData.InsigniaID, + createGroupRequest.GroupData.MembershipFee, + createGroupRequest.GroupData.OpenEnrollment, + createGroupRequest.GroupData.AllowPublish, + createGroupRequest.GroupData.MaturePublish); + if (groupID == UUID.Zero) + { + createGroupReply.ReplyData.Success = false; + createGroupReply.ReplyData.Message = Utils.StringToBytes("We're sorry, but we could not create the requested group. Please try another name"); + OutPacket(createGroupReply, ThrottleOutPacketType.Task); + break; + } + + if (money != null) + money.ApplyGroupCreationCharge(AgentId); + + createGroupReply.ReplyData.Success = true; + createGroupReply.ReplyData.GroupID = groupID; + createGroupReply.ReplyData.Message = Utils.StringToBytes("Group created"); + OutPacket(createGroupReply, ThrottleOutPacketType.Task); + + // Sync with event queue + System.Threading.Thread.Sleep(1000); + + m_GroupsModule.SendAgentGroupDataUpdate(this); + } + break; + + case PacketType.UpdateGroupInfo: + UpdateGroupInfoPacket updateGroupInfo = + (UpdateGroupInfoPacket)Pack; + + if (m_GroupsModule != null) + { + m_GroupsModule.UpdateGroupInfo(this, + updateGroupInfo.GroupData.GroupID, + Utils.BytesToString(updateGroupInfo.GroupData.Charter), + updateGroupInfo.GroupData.ShowInList, + updateGroupInfo.GroupData.InsigniaID, + updateGroupInfo.GroupData.MembershipFee, + updateGroupInfo.GroupData.OpenEnrollment, + updateGroupInfo.GroupData.AllowPublish, + updateGroupInfo.GroupData.MaturePublish); + } + + break; + + case PacketType.SetGroupAcceptNotices: + SetGroupAcceptNoticesPacket setGroupAcceptNotices = + (SetGroupAcceptNoticesPacket)Pack; + + if (m_GroupsModule != null) + { + m_GroupsModule.SetGroupAcceptNotices(this, + setGroupAcceptNotices.Data.GroupID, + setGroupAcceptNotices.Data.AcceptNotices, + setGroupAcceptNotices.NewData.ListInProfile); + } + + break; + + case PacketType.GroupTitleUpdate: + GroupTitleUpdatePacket groupTitleUpdate = + (GroupTitleUpdatePacket)Pack; + + if (m_GroupsModule != null) + { + m_GroupsModule.GroupTitleUpdate(this, + groupTitleUpdate.AgentData.GroupID, + groupTitleUpdate.AgentData.TitleRoleID); + } + + break; default: m_log.Warn("[CLIENT]: unhandled packet " + Pack.ToString()); break; @@ -7459,6 +7555,36 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(p, ThrottleOutPacketType.Task); } + public void SendAvatarGroupsReply(UUID avatarID, GroupMembershipData[] data) + { + int i; + + AvatarGroupsReplyPacket p = (AvatarGroupsReplyPacket)PacketPool.Instance.GetPacket(PacketType.AvatarGroupsReply); + + p.AgentData = new AvatarGroupsReplyPacket.AgentDataBlock(); + p.AgentData.AgentID = AgentId; + p.AgentData.AvatarID = avatarID; + + p.GroupData = new AvatarGroupsReplyPacket.GroupDataBlock[data.Length]; + i = 0; + foreach (GroupMembershipData m in data) + { + p.GroupData[i] = new AvatarGroupsReplyPacket.GroupDataBlock(); + p.GroupData[i].GroupPowers = m.GroupPowers; + p.GroupData[i].AcceptNotices = m.AcceptNotices; + p.GroupData[i].GroupTitle = Utils.StringToBytes(m.GroupTitle); + p.GroupData[i].GroupID = m.GroupID; + p.GroupData[i].GroupName = Utils.StringToBytes(m.GroupName); + p.GroupData[i].GroupInsigniaID = m.GroupPicture; + i++; + } + + p.NewGroupData = new AvatarGroupsReplyPacket.NewGroupDataBlock(); + p.NewGroupData.ListInProfile = true; + + OutPacket(p, ThrottleOutPacketType.Task); + } + public void KillEndDone() { KillPacket kp = new KillPacket(); -- cgit v1.1