LIBOMV-686 Implements new event patterns based on the Microsoft Framework Design Guidelines in AgentManager
* Many other code cleanups and example updates * BREAKING - this is a major shift in the way events are internally handled. git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@3145 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
@@ -19,6 +19,7 @@ namespace OpenMetaverse.TestClient
|
||||
return "Usage: wear [outfit name] eg: 'wear /My Outfit/Dance Party";
|
||||
|
||||
string target = String.Empty;
|
||||
|
||||
bool bake = true;
|
||||
|
||||
for (int ct = 0; ct < args.Length; ct++)
|
||||
|
||||
@@ -20,22 +20,21 @@ namespace OpenMetaverse.TestClient
|
||||
if (!Active)
|
||||
{
|
||||
Active = true;
|
||||
Client.Self.OnChat += new AgentManager.ChatCallback(Self_OnChat);
|
||||
Client.Self.ChatFromSimulator += Self_ChatFromSimulator;
|
||||
return "Echoing is now on.";
|
||||
}
|
||||
else
|
||||
{
|
||||
Active = false;
|
||||
Client.Self.OnChat -= new AgentManager.ChatCallback(Self_OnChat);
|
||||
Client.Self.ChatFromSimulator -= Self_ChatFromSimulator;
|
||||
return "Echoing is now off.";
|
||||
}
|
||||
}
|
||||
|
||||
void Self_OnChat(string message, ChatAudibleLevel audible, ChatType type,
|
||||
ChatSourceType sourcetype, string fromName, UUID id, UUID ownerid, Vector3 position)
|
||||
{
|
||||
if (message.Length > 0 && (Client.MasterKey == id || (Client.MasterName == fromName && !Client.AllowObjectMaster)))
|
||||
Client.Self.Chat(message, 0, ChatType.Normal);
|
||||
}
|
||||
void Self_ChatFromSimulator(object sender, ChatEventArgs e)
|
||||
{
|
||||
if (e.Message.Length > 0 && (Client.MasterKey == e.SourceID || (Client.MasterName == e.FromName && !Client.AllowObjectMaster)))
|
||||
Client.Self.Chat(e.Message, 0, ChatType.Normal);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,10 +30,16 @@ namespace OpenMetaverse.TestClient
|
||||
string message = String.Empty;
|
||||
for (int ct = 1; ct < args.Length; ct++)
|
||||
message += args[ct] + " ";
|
||||
message = message.TrimEnd();
|
||||
if (message.Length > 1023) message = message.Remove(1023);
|
||||
|
||||
Client.Self.OnGroupChatJoin += new AgentManager.GroupChatJoinedCallback(Self_OnGroupChatJoin);
|
||||
message = message.TrimEnd();
|
||||
if (message.Length > 1023)
|
||||
{
|
||||
message = message.Remove(1023);
|
||||
Console.WriteLine("Message truncated at 1024 characters");
|
||||
}
|
||||
|
||||
Client.Self.GroupChatJoined += Self_GroupChatJoined;
|
||||
|
||||
if (!Client.Self.GroupChatSessions.ContainsKey(ToGroupID))
|
||||
{
|
||||
WaitForSessionStart.Reset();
|
||||
@@ -52,8 +58,8 @@ namespace OpenMetaverse.TestClient
|
||||
{
|
||||
return "Timeout waiting for group session start";
|
||||
}
|
||||
|
||||
Client.Self.OnGroupChatJoin -= new AgentManager.GroupChatJoinedCallback(Self_OnGroupChatJoin);
|
||||
|
||||
Client.Self.GroupChatJoined -= Self_GroupChatJoined;
|
||||
return "Instant Messaged group " + ToGroupID.ToString() + " with message: " + message;
|
||||
}
|
||||
else
|
||||
@@ -62,11 +68,11 @@ namespace OpenMetaverse.TestClient
|
||||
}
|
||||
}
|
||||
|
||||
void Self_OnGroupChatJoin(UUID groupChatSessionID, string sessionName, UUID tmpSessionID, bool success)
|
||||
void Self_GroupChatJoined(object sender, GroupChatJoinedEventArgs e)
|
||||
{
|
||||
if (success)
|
||||
if (e.Success)
|
||||
{
|
||||
Console.WriteLine("Joined {0} Group Chat Success!", sessionName);
|
||||
Console.WriteLine("Joined {0} Group Chat Success!", e.SessionName);
|
||||
WaitForSessionStart.Set();
|
||||
}
|
||||
else
|
||||
@@ -74,5 +80,7 @@ namespace OpenMetaverse.TestClient
|
||||
Console.WriteLine("Join Group Chat failed :(");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,7 @@ namespace OpenMetaverse.TestClient.Commands
|
||||
{
|
||||
class SearchClassifiedsCommand : Command
|
||||
{
|
||||
System.Threading.AutoResetEvent waitQuery = new System.Threading.AutoResetEvent(false);
|
||||
int resultCount;
|
||||
System.Threading.AutoResetEvent waitQuery = new System.Threading.AutoResetEvent(false);
|
||||
|
||||
public SearchClassifiedsCommand(TestClient testClient)
|
||||
{
|
||||
|
||||
@@ -7,7 +7,6 @@ namespace OpenMetaverse.TestClient.Commands
|
||||
class SearchPlacesCommand : Command
|
||||
{
|
||||
System.Threading.AutoResetEvent waitQuery = new System.Threading.AutoResetEvent(false);
|
||||
int resultCount;
|
||||
|
||||
public SearchPlacesCommand(TestClient testClient)
|
||||
{
|
||||
|
||||
@@ -17,17 +17,17 @@ namespace OpenMetaverse.TestClient
|
||||
public override string Execute(string[] args, UUID fromAgentID)
|
||||
{
|
||||
System.Threading.AutoResetEvent waitBalance = new System.Threading.AutoResetEvent(false);
|
||||
AgentManager.BalanceCallback del = delegate(int balance) { waitBalance.Set(); };
|
||||
Client.Self.OnBalanceUpdated += del;
|
||||
|
||||
EventHandler<BalanceEventArgs> del = delegate(object sender, BalanceEventArgs e) { waitBalance.Set(); };
|
||||
Client.Self.MoneyBalance += del;
|
||||
Client.Self.RequestBalance();
|
||||
String result = "Timeout waiting for balance reply";
|
||||
if (waitBalance.WaitOne(10000, false))
|
||||
{
|
||||
result = Client.ToString() + " has L$: " + Client.Self.Balance;
|
||||
}
|
||||
Client.Self.OnBalanceUpdated -= del;
|
||||
return result;
|
||||
|
||||
}
|
||||
Client.Self.MoneyBalance -= del;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ namespace OpenMetaverse.TestClient
|
||||
|
||||
Network.RegisterCallback(PacketType.AgentDataUpdate, new NetworkManager.PacketCallback(AgentDataUpdateHandler));
|
||||
Network.OnLogin += new NetworkManager.LoginCallback(LoginHandler);
|
||||
Self.OnInstantMessage += new AgentManager.InstantMessageCallback(Self_OnInstantMessage);
|
||||
Self.IM += Self_IM;
|
||||
Groups.OnGroupMembers += new GroupManager.GroupMembersCallback(GroupMembersHandler);
|
||||
Inventory.OnObjectOffered += new InventoryManager.ObjectOfferedCallback(Inventory_OnInventoryObjectReceived);
|
||||
|
||||
@@ -64,6 +64,37 @@ namespace OpenMetaverse.TestClient
|
||||
updateTimer.Start();
|
||||
}
|
||||
|
||||
void Self_IM(object sender, InstantMessageEventArgs e)
|
||||
{
|
||||
bool groupIM = e.IM.GroupIM && GroupMembers != null && GroupMembers.ContainsKey(e.IM.FromAgentID) ? true : false;
|
||||
|
||||
if (e.IM.FromAgentID == MasterKey || (GroupCommands && groupIM))
|
||||
{
|
||||
// Received an IM from someone that is authenticated
|
||||
Console.WriteLine("<{0} ({1})> {2}: {3} (@{4}:{5})", e.IM.GroupIM ? "GroupIM" : "IM", e.IM.Dialog, e.IM.FromAgentName, e.IM.Message,
|
||||
e.IM.RegionID, e.IM.Position);
|
||||
|
||||
if (e.IM.Dialog == InstantMessageDialog.RequestTeleport)
|
||||
{
|
||||
Console.WriteLine("Accepting teleport lure.");
|
||||
Self.TeleportLureRespond(e.IM.FromAgentID, true);
|
||||
}
|
||||
else if (
|
||||
e.IM.Dialog == InstantMessageDialog.MessageFromAgent ||
|
||||
e.IM.Dialog == InstantMessageDialog.MessageFromObject)
|
||||
{
|
||||
ClientManager.Instance.DoCommandAll(e.IM.Message, e.IM.FromAgentID);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Received an IM from someone that is not the bot's master, ignore
|
||||
Console.WriteLine("<{0} ({1})> {2} (not master): {3} (@{4}:{5})", e.IM.GroupIM ? "GroupIM" : "IM", e.IM.Dialog, e.IM.FromAgentName, e.IM.Message,
|
||||
e.IM.RegionID, e.IM.Position);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initialize everything that needs to be initialized once we're logged in.
|
||||
/// </summary>
|
||||
@@ -186,37 +217,7 @@ namespace OpenMetaverse.TestClient
|
||||
|
||||
Logger.Log("[AlertMessage] " + Utils.BytesToString(message.AlertData.Message), Helpers.LogLevel.Info, this);
|
||||
}
|
||||
|
||||
private void Self_OnInstantMessage(InstantMessage im, Simulator simulator)
|
||||
{
|
||||
bool groupIM = im.GroupIM && GroupMembers != null && GroupMembers.ContainsKey(im.FromAgentID) ? true : false;
|
||||
|
||||
if (im.FromAgentID == MasterKey || (GroupCommands && groupIM))
|
||||
{
|
||||
// Received an IM from someone that is authenticated
|
||||
Console.WriteLine("<{0} ({1})> {2}: {3} (@{4}:{5})", im.GroupIM ? "GroupIM" : "IM", im.Dialog, im.FromAgentName, im.Message, im.RegionID, im.Position);
|
||||
|
||||
if (im.Dialog == InstantMessageDialog.RequestTeleport)
|
||||
{
|
||||
Console.WriteLine("Accepting teleport lure.");
|
||||
Self.TeleportLureRespond(im.FromAgentID, true);
|
||||
}
|
||||
else if (
|
||||
im.Dialog == InstantMessageDialog.MessageFromAgent ||
|
||||
im.Dialog == InstantMessageDialog.MessageFromObject)
|
||||
{
|
||||
ClientManager.Instance.DoCommandAll(im.Message, im.FromAgentID);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Received an IM from someone that is not the bot's master, ignore
|
||||
Console.WriteLine("<{0} ({1})> {2} (not master): {3} (@{4}:{5})", im.GroupIM ? "GroupIM" : "IM", im.Dialog, im.FromAgentName, im.Message,
|
||||
im.RegionID, im.Position);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private bool Inventory_OnInventoryObjectReceived(InstantMessage offer, AssetType type,
|
||||
UUID objectID, bool fromTask)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user