Smuxi.Engine.XmppProtocolManager.OnGroupChatMessage C# (CSharp) Method

OnGroupChatMessage() private method

private OnGroupChatMessage ( Message msg ) : void
msg Message
return void
        void OnGroupChatMessage(Message msg)
        {
            string group_jid = msg.From.Bare;
            XmppGroupChatModel groupChat = (XmppGroupChatModel) Session.GetChat(group_jid, ChatType.Group, this);
            if (groupChat == null) {
                var builder = CreateMessageBuilder();
                builder.AppendEventPrefix();
                builder.AppendErrorText(_("Received a groupchat message from {0} but there's no corresponding chat window: {1}"), msg.From, msg.Body);
                Session.AddMessageToChat(NetworkChat, builder.ToMessage());
                return;
            }
            // resource can be empty for room messages
            var sender_id = msg.From.Resource ?? msg.From.Bare;
            var person = groupChat.GetPerson(sender_id);
            if (person == null) {
                // happens in case of a delayed message if the participant has left meanwhile
                // TODO: or in case of a room message?
                person = new PersonModel(sender_id,
                                         sender_id,
                                         NetworkID, Protocol, this);
            }

            // XXX maybe only a Google Talk bug requires this:
            if (msg.XDelay != null) {
                var stamp = msg.XDelay.Stamp;
                if (stamp > groupChat.LatestSeenStamp) {
                    groupChat.LatestSeenStamp = stamp;
                } else {
                    return; // already seen newer delayed message
                }
                if (groupChat.SeenNewMessages) {
                    return; // already seen newer messages
                }
            } else {
                groupChat.SeenNewMessages = true;
            }

            // mark highlights only for received messages
            MessageModel message;
            if (person.ID == groupChat.OwnNickname) {
                message = CreateEchoGroupChatMessage(groupChat, msg);
            } else {
                message = CreateGroupChatMessage(groupChat, person, msg);
            }
            Session.AddMessageToChat(groupChat, message);
            OnMessageReceived(
                new MessageEventArgs(groupChat, message, msg.From, groupChat.ID)
            );
        }