void OnMessage(object sender, Message msg)
{
// process chatstates
if (msg.Chatstate != agsXMPP.protocol.extensions.chatstates.Chatstate.None) {
OnChatState(msg);
}
if (String.IsNullOrEmpty(msg.Body)) {
// TODO: capture events and stuff
return;
}
switch (msg.Type) {
case XmppMessageType.groupchat:
OnGroupChatMessage(msg);
break;
case XmppMessageType.chat:
case XmppMessageType.headline:
case XmppMessageType.normal:
if (String.IsNullOrEmpty(msg.From.User)) {
OnServerMessage(msg);
} else if (msg.MucUser != null) {
OnMucMessage(msg);
} else {
OnPrivateChatMessage(msg);
}
break;
case XmppMessageType.error:
{
var chat = Session.GetChat(msg.From, ChatType.Group, this);
if (chat != null) {
OnGroupChatMessageError(msg, chat as XmppGroupChatModel);
break;
}
chat = Session.GetChat(msg.From, ChatType.Person, this);
if (chat != null) {
OnPrivateChatMessageError(msg, chat as PersonChatModel);
break;
}
// no person and no groupchat open? -> dump in networkchat
var builder = CreateMessageBuilder();
// TODO: nicer formatting
if (msg.Error.ErrorText != null) {
builder.AppendErrorText(msg.Error.ErrorText);
} else {
builder.AppendErrorText(msg.Error.ToString());
}
Session.AddMessageToChat(NetworkChat, builder.ToMessage());
}
break;
}
}