Example #1
0
        private async void OnSystemMessage(Xmpp.Im.Message xmppXmppMessage)
        {
            var           notificationType = GetNotificationType(xmppXmppMessage.ExtraParameters);
            SystemMessage systemMessage    = null;

            if (notificationType == NotificationTypes.GroupCreate || notificationType == NotificationTypes.GroupUpdate)
            {
                systemMessage = new GroupInfoMessage();
                FillSystemMessageFields(xmppXmppMessage, systemMessage);
                FillGroupInfoMessageFields(xmppXmppMessage.ExtraParameters, (GroupInfoMessage)systemMessage);
            }
            else
            {
                systemMessage = new SystemMessage();
                FillSystemMessageFields(xmppXmppMessage, systemMessage);
            }

            systemMessage.ExtraParameters = xmppXmppMessage.ExtraParameters;

            await LoggerHolder.Log(LogLevel.Debug, "XMPP: OnMessageReceived ====> " +
                                   " From: " + systemMessage.SenderId +
                                   " Body: " + systemMessage.MessageText +
                                   " FullXmlMessage: " + xmppXmppMessage.DataString);

            var handler = SystemMessageReceived;

            if (handler != null)
            {
                var systemMessageEventArgs = new SystemMessageEventArgs(new Jid(xmppXmppMessage.From.ToString()), systemMessage, xmppXmppMessage.Type);
                handler.Invoke(this, systemMessageEventArgs);
            }
        }
Example #2
0
        private void FillGroupInfoMessageFields(XElement extraParams, GroupInfoMessage groupInfoMessage)
        {
            groupInfoMessage.DialogId        = GetExtraParam(extraParams, ExtraParamsList.dialog_id);
            groupInfoMessage.RoomName        = GetExtraParam(extraParams, ExtraParamsList.room_name);
            groupInfoMessage.RoomPhoto       = GetExtraParam(extraParams, ExtraParamsList.room_photo);
            groupInfoMessage.DateSent        = GetDateTimeExtraParam(extraParams, ExtraParamsList.date_sent);
            groupInfoMessage.RoomUpdatedDate = GetDateTimeExtraParam(extraParams, ExtraParamsList.room_updated_date);

            StringIntListConverter stringIntListConverter = new StringIntListConverter();

            groupInfoMessage.CurrentOccupantsIds = stringIntListConverter.ConvertToIntList(GetExtraParam(extraParams, ExtraParamsList.current_occupant_ids)).ToArray();

            var dialogType = GetExtraParam(extraParams, ExtraParamsList.type);

            if (dialogType != null)
            {
                int intValue;
                if (int.TryParse(dialogType, out intValue) && Enum.IsDefined(typeof(DialogType), intValue))
                {
                    groupInfoMessage.DialogType = (DialogType)intValue;
                }
            }
        }
        private async Task OnGroupInfoMessage(GroupInfoMessage groupInfoMessage)
        {
            var dialog = new Dialog
            {
                Id = groupInfoMessage.DialogId,
                LastMessage = "Notification message",
                LastMessageDateSent = groupInfoMessage.DateSent.ToUnixEpoch(),
                Name = groupInfoMessage.RoomName,
                Photo = groupInfoMessage.RoomPhoto,
                OccupantsIds = groupInfoMessage.CurrentOccupantsIds,
                Type = groupInfoMessage.DialogType,
                XmppRoomJid = BuildRoomJid(groupInfoMessage.DialogId)
            };

            var dialogViewModel = DialogViewModel.FromDialog(dialog);
            var imagesService = ServiceLocator.Locator.Get<IImageService>();
            dialogViewModel.Image = await imagesService.GetPublicImage(dialogViewModel.Photo);
            int currentUserId = SettingsManager.Instance.ReadFromSettings<int>(SettingsKeys.CurrentUserId);
            var groupChatManager = quickbloxClient.ChatXmppClient.GetGroupChatManager(dialogViewModel.XmppRoomJid, dialogViewModel.Id);
            groupChatManager.JoinGroup(currentUserId.ToString());

            Dialogs.Insert(0, dialogViewModel);
        }