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); } }
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); }