/// <summary> /// Event handler for outgoing IMs /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void Netcom_InstantMessageSent(object sender, Radegast.Netcom.InstantMessageSentEventArgs e) { // Message to an individual IMSession sess = (IMSession)control.converse.GetConversation(control.instance.Names.Get(e.TargetID, true)); sess?.OnMessage(Client.Self.AgentID, Client.Self.Name, e.Message); }
/// <summary> /// Handle Instant Messages /// </summary> /// <param name="im"></param> /// <param name="simulator"></param> void OnInstantMessage(object sender, InstantMessageEventArgs e) { WorkPool.QueueUserWorkItem(sync => { Thread.Sleep(100); // Give tab a chance to show up IMSession sess = null; string groupName; // All sorts of things come in as a instant messages. For actual messages // we need to match them up with an existing Conversation. IM Conversations // are keyed by the name of the group or individual involved. switch (e.IM.Dialog) { case InstantMessageDialog.MessageFromAgent: if (control.instance.Groups.ContainsKey(e.IM.IMSessionID)) { // Message from a group member groupName = control.instance.Groups[e.IM.IMSessionID].Name; sess = (IMSession)control.converse.GetConversation(groupName); if (sess != null) { sess.OnMessage(e.IM.FromAgentID, e.IM.FromAgentName, e.IM.Message); } else { Talker.Say(e.IM.FromAgentName + ", " + e.IM.Message); } } else if (e.IM.BinaryBucket.Length >= 2) { // Ad-hoc friend conference sess = (IMSession)control.converse.GetConversation(Utils.BytesToString(e.IM.BinaryBucket)); if (sess != null) { sess.OnMessage(e.IM.FromAgentID, e.IM.FromAgentName, e.IM.Message); } else { Talker.Say(e.IM.FromAgentName + ", " + e.IM.Message); } } else if (e.IM.FromAgentName == "Second Life") { Talker.Say("Second Life says " + e.IM.Message); } else { // Message from an individual sess = (IMSession)control.converse.GetConversation(e.IM.FromAgentName); if (sess != null) { sess.OnMessage(e.IM.FromAgentID, e.IM.FromAgentName, e.IM.Message); } else { Talker.Say(e.IM.FromAgentName + ", " + e.IM.Message); } } break; case InstantMessageDialog.SessionSend: if (control.instance.Groups.ContainsKey(e.IM.IMSessionID)) { // Message from a group member groupName = control.instance.Groups[e.IM.IMSessionID].Name; sess = (IMSession)control.converse.GetConversation(groupName); } else if (e.IM.BinaryBucket.Length >= 2) // ad hoc friends conference { sess = (IMSession)control.converse.GetConversation(Utils.BytesToString(e.IM.BinaryBucket)); } sess?.OnMessage(e.IM.FromAgentID, e.IM.FromAgentName, e.IM.Message); break; case InstantMessageDialog.FriendshipOffered: Talker.Say(e.IM.FromAgentName + " is offering friendship."); break; default: break; } } ); }