Skip to content

Instantly share code, notes, and snippets.

@siniypin
Last active September 16, 2019 12:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save siniypin/5f403be8dc6e5b2f802e926c1b7855d3 to your computer and use it in GitHub Desktop.
Save siniypin/5f403be8dc6e5b2f802e926c1b7855d3 to your computer and use it in GitHub Desktop.
Synchronizing SIP agent events with UI
public class ChatControl
{
private void client_LoginStateChanged(object sender, EventArgs e)
{
if (client.LoginState == LoginStateEnum.Logon)
client.Messanger.IncomingMessage += Messanger_IncomingMessage;
if ((client.LoginState == LoginStateEnum.Logoff || client.LoginState == LoginStateEnum.LoginError)
&& client.Messanger != null)
client.Messanger.IncomingMessage -= Messanger_IncomingMessage;
}
private void Messanger_IncomingMessage(object sender, PagerEventArgs e)
{
ChatMessInfo mess = e.Body;
List<ChatMessInfo> chatMessages = null;
if (!conversations.TryGetValue(contact, out chatMessages))
{
chatMessages = new List<ChatMessInfo>();
conversations.Add(contact, chatMessages);
}
chatMessages.Add(mess);
...
public class InstantMessengerService : IInstantMessangerService
{
private SynchronizationContext _syncCtx;
public event EventHandler<PagerEventArgs> IncomingMessage = delegate { };
public InstantMessangerService(Account chatAccount)
{
_sipUserAgent.IncomingMessage += OnIncomingMessage;
_syncCtx = SynchronizationContext.Current;
}
private void OnIncomingMessage(object sender, PagerEventArgs e)
{
try
{
_syncCtx.Post(delegate
{
// read and parse msg
ChatMessInfo chatInfo = new ChatMessInfo(StringExtensions.ExtractUid(e.From), docx.DocumentElement);
IncomingMessage(this, new PagerEventArgs(e, chatInfo));
}, null);
}
catch (InvalidOperationException)
{
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment