LIBOMV-686 Implements new event patterns based on the Microsoft Framework Design Guidelines in GroupManager

* BREAKING CHANGE * this is a major shift in the way events are internally handled.

git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@3162 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
Jim Radford
2009-10-20 20:18:03 +00:00
parent 9f8d0d49f0
commit b0cb77e1e5
12 changed files with 869 additions and 408 deletions

View File

@@ -21,7 +21,8 @@ namespace OpenMetaverse.TestClient
testClient.Avatars.OnAvatarInterests += new AvatarManager.AvatarInterestsCallback(Avatars_OnAvatarInterests);
testClient.Avatars.OnAvatarProperties += new AvatarManager.AvatarPropertiesCallback(Avatars_OnAvatarProperties);
testClient.Avatars.OnAvatarGroups += new AvatarManager.AvatarGroupsCallback(Avatars_OnAvatarGroups);
testClient.Groups.OnGroupJoined += new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);
testClient.Groups.GroupJoinedReply += new EventHandler<GroupOperationEventArgs>(Groups_OnGroupJoined);
testClient.Avatars.OnAvatarPicks += new AvatarManager.AvatarPicksCallback(Avatars_OnAvatarPicks);
testClient.Avatars.OnPickInfo += new AvatarManager.PickInfoCallback(Avatars_OnPickInfo);
@@ -29,7 +30,7 @@ namespace OpenMetaverse.TestClient
Description = "Clones another avatars profile as closely as possible. WARNING: This command will " +
"destroy your existing profile! Usage: cloneprofile [targetuuid]";
Category = CommandCategory.Other;
}
}
public override string Execute(string[] args, UUID fromAgentID)
{
@@ -141,16 +142,16 @@ namespace OpenMetaverse.TestClient
}
}
void Groups_OnGroupJoined(UUID groupID, bool success)
void Groups_OnGroupJoined(object sender, GroupOperationEventArgs e)
{
Console.WriteLine(Client.ToString() + (success ? " joined " : " failed to join ") +
groupID.ToString());
Console.WriteLine(Client.ToString() + (e.Success ? " joined " : " failed to join ") +
e.GroupID.ToString());
if (success)
if (e.Success)
{
Console.WriteLine(Client.ToString() + " setting " + groupID.ToString() +
Console.WriteLine(Client.ToString() + " setting " + e.GroupID.ToString() +
" as the active group");
Client.Groups.ActivateGroup(groupID);
Client.Groups.ActivateGroup(e.GroupID);
}
}
}

View File

@@ -29,7 +29,7 @@ namespace OpenMetaverse.TestClient.Commands
waitQuery.Reset();
Client.Avatars.OnAvatarNames += Avatars_OnAvatarNames;
Client.Groups.OnGroupProfile += Groups_OnGroupProfile;
Client.Groups.GroupProfile += Groups_OnGroupProfile;
Client.Avatars.RequestAvatarName(key);
Client.Groups.RequestGroupProfile(key);
@@ -39,13 +39,13 @@ namespace OpenMetaverse.TestClient.Commands
}
Client.Avatars.OnAvatarNames -= Avatars_OnAvatarNames;
Client.Groups.OnGroupProfile -= Groups_OnGroupProfile;
Client.Groups.GroupProfile -= Groups_OnGroupProfile;
return result.ToString();
}
void Groups_OnGroupProfile(Group group)
void Groups_OnGroupProfile(object sender, GroupProfileEventArgs e)
{
result.AppendLine("Group: " + group.Name + " " + group.ID);
result.AppendLine("Group: " + e.Group.Name + " " + e.Group.ID);
waitQuery.Set();
}

View File

@@ -35,31 +35,29 @@ namespace OpenMetaverse.TestClient
GroupName = GroupName.Trim();
GroupUUID = Client.GroupName2UUID(GroupName);
if (UUID.Zero != GroupUUID) {
GroupManager.GroupMembersCallback callback =
new GroupManager.GroupMembersCallback(GroupMembersHandler);
Client.Groups.OnGroupMembers += callback;
if (UUID.Zero != GroupUUID) {
Client.Groups.GroupMembersReply += GroupMembersHandler;
GroupRequestID = Client.Groups.RequestGroupMembers(GroupUUID);
GroupsEvent.WaitOne(30000, false);
GroupsEvent.Reset();
Client.Groups.OnGroupMembers -= callback;
Client.Groups.GroupMembersReply -= GroupMembersHandler;
return Client.ToString() + " got group members";
}
return Client.ToString() + " doesn't seem to be member of the group " + GroupName;
}
private void GroupMembersHandler(UUID requestID, UUID groupID, Dictionary<UUID, GroupMember> members)
private void GroupMembersHandler(object sender, GroupMembersReplyEventArgs e)
{
if (requestID == GroupRequestID) {
if (e.RequestID == GroupRequestID) {
StringBuilder sb = new StringBuilder();
sb.AppendLine();
sb.AppendFormat("GroupMembers: RequestID {0}", requestID).AppendLine();
sb.AppendFormat("GroupMembers: RequestID {0}", e.RequestID).AppendLine();
sb.AppendFormat("GroupMembers: GroupUUID {0}", GroupUUID).AppendLine();
sb.AppendFormat("GroupMembers: GroupName {0}", GroupName).AppendLine();
if (members.Count > 0)
foreach (KeyValuePair<UUID, GroupMember> member in members)
if (e.Members.Count > 0)
foreach (KeyValuePair<UUID, GroupMember> member in e.Members)
sb.AppendFormat("GroupMembers: MemberUUID {0}", member.Key.ToString()).AppendLine();
sb.AppendFormat("GroupMembers: MemberCount {0}", members.Count).AppendLine();
sb.AppendFormat("GroupMembers: MemberCount {0}", e.Members.Count).AppendLine();
Console.WriteLine(sb.ToString());
GroupsEvent.Set();
}

View File

@@ -36,33 +36,32 @@ namespace OpenMetaverse.TestClient
GroupUUID = Client.GroupName2UUID(GroupName);
if (UUID.Zero != GroupUUID) {
GroupManager.GroupRolesCallback callback =
new GroupManager.GroupRolesCallback(GroupRolesHandler);
Client.Groups.OnGroupRoles += callback;
Client.Groups.GroupRoleDataReply += Groups_GroupRoles;
GroupRequestID = Client.Groups.RequestGroupRoles(GroupUUID);
GroupsEvent.WaitOne(30000, false);
GroupsEvent.Reset();
Client.Groups.OnGroupRoles -= callback;
Client.Groups.GroupRoleDataReply += Groups_GroupRoles;
return Client.ToString() + " got group roles";
}
return Client.ToString() + " doesn't seem to have any roles in the group " + GroupName;
}
private void GroupRolesHandler(UUID requestID, UUID groupID, Dictionary<UUID, GroupRole> roles)
void Groups_GroupRoles(object sender, GroupRolesDataReplyEventArgs e)
{
if (requestID == GroupRequestID) {
if (e.RequestID == GroupRequestID)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine();
sb.AppendFormat("GroupRole: RequestID {0}", requestID).AppendLine();
sb.AppendFormat("GroupRole: RequestID {0}", e.RequestID).AppendLine();
sb.AppendFormat("GroupRole: GroupUUID {0}", GroupUUID).AppendLine();
sb.AppendFormat("GroupRole: GroupName {0}", GroupName).AppendLine();
if (roles.Count > 0)
foreach (KeyValuePair<UUID, GroupRole> role in roles)
if (e.Roles.Count > 0)
foreach (KeyValuePair<UUID, GroupRole> role in e.Roles)
sb.AppendFormat("GroupRole: Role {0} {1}|{2}", role.Value.ID, role.Value.Name, role.Value.Title).AppendLine();
sb.AppendFormat("GroupRole: RoleCount {0}", roles.Count).AppendLine();
sb.AppendFormat("GroupRole: RoleCount {0}", e.Roles.Count).AppendLine();
Console.WriteLine(sb.ToString());
GroupsEvent.Set();
}
}
}
}
}

View File

@@ -64,9 +64,8 @@ namespace OpenMetaverse.TestClient
else
return resolvedGroupName;
}
GroupManager.GroupJoinedCallback gcallback = new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);
Client.Groups.OnGroupJoined += gcallback;
Client.Groups.GroupJoinedReply += Groups_OnGroupJoined;
Client.Groups.RequestJoinGroup(resolvedGroupID);
/* A.Biondi
@@ -75,7 +74,7 @@ namespace OpenMetaverse.TestClient
GetGroupsSearchEvent.WaitOne(60000, false);
Client.Groups.OnGroupJoined -= gcallback;
Client.Groups.GroupJoinedReply -= Groups_GroupJoined;
GetGroupsSearchEvent.Reset();
Client.ReloadGroupsCache();
@@ -84,6 +83,11 @@ namespace OpenMetaverse.TestClient
return "Unable to join the group " + resolvedGroupName;
}
void Groups_GroupJoined(object sender, GroupOperationEventArgs e)
{
throw new NotImplementedException();
}
void Directory_DirGroups(object sender, DirGroupsReplyEventArgs e)
{
if (queryID == e.QueryID)
@@ -126,9 +130,9 @@ namespace OpenMetaverse.TestClient
}
}
void Groups_OnGroupJoined(UUID groupID, bool success)
void Groups_OnGroupJoined(object sender, GroupOperationEventArgs e)
{
Console.WriteLine(Client.ToString() + (success ? " joined " : " failed to join ") + groupID.ToString());
Console.WriteLine(Client.ToString() + (e.Success ? " joined " : " failed to join ") + e.GroupID.ToString());
/* A.Biondi
* This code is not necessary because it is yet present in the
@@ -144,7 +148,7 @@ namespace OpenMetaverse.TestClient
*/
joinedGroup = success;
joinedGroup = e.Success;
GetGroupsSearchEvent.Set();
}
}

View File

@@ -29,14 +29,13 @@ namespace OpenMetaverse.TestClient
groupName = groupName.Trim();
UUID groupUUID = Client.GroupName2UUID(groupName);
if (UUID.Zero != groupUUID) {
GroupManager.GroupLeftCallback lcallback = new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);
Client.Groups.OnGroupLeft += lcallback;
if (UUID.Zero != groupUUID) {
Client.Groups.GroupLeaveReply += Groups_GroupLeft;
Client.Groups.LeaveGroup(groupUUID);
GroupsEvent.WaitOne(30000, false);
Client.Groups.GroupLeaveReply -= Groups_GroupLeft;
Client.Groups.OnGroupLeft -= lcallback;
GroupsEvent.Reset();
Client.ReloadGroupsCache();
@@ -47,13 +46,13 @@ namespace OpenMetaverse.TestClient
return Client.ToString() + " doesn't seem to be member of the group " + groupName;
}
void Groups_OnGroupLeft(UUID groupID, bool success)
void Groups_GroupLeft(object sender, GroupOperationEventArgs e)
{
Console.WriteLine(Client.ToString() + (success ? " has left group " : " failed to left group ") + groupID.ToString());
Console.WriteLine(Client.ToString() + (e.Success ? " has left group " : " failed to left group ") + e.GroupID.ToString());
leftGroup = success;
leftGroup = e.Success;
GroupsEvent.Set();
}
}
}

View File

@@ -53,7 +53,7 @@ namespace OpenMetaverse.TestClient
Network.RegisterCallback(PacketType.AgentDataUpdate, new NetworkManager.PacketCallback(AgentDataUpdateHandler));
Network.OnLogin += new NetworkManager.LoginCallback(LoginHandler);
Self.IM += Self_IM;
Groups.OnGroupMembers += new GroupManager.GroupMembersCallback(GroupMembersHandler);
Groups.GroupMembersReply += GroupMembersHandler;
Inventory.OnObjectOffered += new InventoryManager.ObjectOfferedCallback(Inventory_OnInventoryObjectReceived);
Network.RegisterCallback(PacketType.AvatarAppearance, new NetworkManager.PacketCallback(AvatarAppearanceHandler));
@@ -140,15 +140,22 @@ namespace OpenMetaverse.TestClient
public void ReloadGroupsCache()
{
GroupManager.CurrentGroupsCallback callback =
new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);
Groups.OnCurrentGroups += callback;
Groups.CurrentGroups += Groups_CurrentGroups;
Groups.RequestCurrentGroups();
GroupsEvent.WaitOne(10000, false);
Groups.OnCurrentGroups -= callback;
Groups.CurrentGroups -= Groups_CurrentGroups;
GroupsEvent.Reset();
}
void Groups_CurrentGroups(object sender, CurrentGroupsEventArgs e)
{
if (null == GroupsCache)
GroupsCache = e.Groups;
else
lock (GroupsCache) { GroupsCache = e.Groups; }
GroupsEvent.Set();
}
public UUID GroupName2UUID(String groupName)
{
UUID tryUUID;
@@ -167,17 +174,7 @@ namespace OpenMetaverse.TestClient
}
}
return UUID.Zero;
}
private void Groups_OnCurrentGroups(Dictionary<UUID, Group> pGroups)
{
if (null == GroupsCache)
GroupsCache = pGroups;
else
lock(GroupsCache) { GroupsCache = pGroups; }
GroupsEvent.Set();
}
}
private void updateTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
@@ -197,11 +194,11 @@ namespace OpenMetaverse.TestClient
}
}
private void GroupMembersHandler(UUID requestID, UUID groupID, Dictionary<UUID, GroupMember> members)
private void GroupMembersHandler(object sender, GroupMembersReplyEventArgs e)
{
if (requestID != GroupMembersRequestID) return;
if (e.RequestID != GroupMembersRequestID) return;
GroupMembers = members;
GroupMembers = e.Members;
}
private void AvatarAppearanceHandler(Packet packet, Simulator simulator)