public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* { * "execFun": "GetDialogs", * "data": { * "msgCount": "2" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("getMsg", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); GetDialogsInfo info = DeserializeObject.ParseJSON <GetDialogsInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { Members owner = db.Members.First(it => it.login.Equals(myLogin)); // ReSharper disable once SuggestVarOrType_Elsewhere List <OutGetMsgInfo> list = new List <OutGetMsgInfo>(); //I'am consist in this dialogs List <MemberInGroup> mg = db.MemberInGroup.Include(g => g.group) .ThenInclude(s => s.Shares).ThenInclude(own => own.owner) .Where(it => it.member.login.Equals(myLogin)) .ToList(); mg.ForEach(it => { string groupName = it.group.group_name_part; if (it.group.one_to_one) { groupName = db.MemberInGroup.Include(m => m.member).FirstOrDefault(mig => mig.group == it.group && mig.member != owner)?.member.nick_name; } OutGetMsgInfo group = new OutGetMsgInfo(it.group.group_id, groupName, it.group.one_to_one, it.group.privated); //Add all message in dialog it.group.Shares.OrderBy(s => s.sending_date) .Take(info.msgCount) .ToList() .ForEach(msg => group.messages.Add(new OneMessageInfo(msg.id, Encoding.Unicode.GetString(msg.file_data), msg.current_fragment, msg.total_fragment, msg.sending_date, msg.owner.nick_name, msg.owner.login))); //Add users where consist in dialog db.MemberInGroup.Include(m => m.member).Where(mig => mig.groupId.Equals(it.groupId)) .ForEachAsync(memb => group.members.Add(memb.member.login)); list.Add(group); }); output.data = list; } rez.msgForOwner = output; return(rez); }
public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* { * "execFun": "GetMsg", * "data": { * "dialogId": "788FEFAD0ED24436AD73D968685110E8", * "msgCount": "2", * "offset": "0" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("getMsg", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); GetMsgInfo info = DeserializeObject.ParseJSON <GetMsgInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { Members owner = db.Members.First(it => it.login.Equals(myLogin)); if (db.MemberInGroup.Include(g => g.group).Any(it => it.member.login.Equals(myLogin) && it.groupId == info.dialogId)) { MemberInGroup mg = db.MemberInGroup.Include(g => g.group).ThenInclude(s => s.Shares).Where(it => it.member.login.Equals(myLogin) && it.groupId == info.dialogId).First(); string groupName = mg.group.group_name_part; if (mg.group.one_to_one) { groupName = db.MemberInGroup.Include(m => m.member).FirstOrDefault(mig => mig.group == mg.group && mig.member != owner)?.member.nick_name; } OutGetMsgInfo groupMsg = new OutGetMsgInfo(mg.group.group_id, groupName, mg.group.one_to_one, mg.group.privated); mg.group.Shares.Where(it => it.death_date > SystemClock.GetInstance().CurrentTime) .OrderBy(s => s.sending_date) .Skip(info.offset) .Take(info.msgCount) .ToList() .ForEach(msg => groupMsg.messages.Add(new OneMessageInfo(msg.id, Encoding.Unicode.GetString(msg.file_data), msg.current_fragment, msg.total_fragment, msg.sending_date, msg.owner.nick_name, msg.owner.login))); output.data = groupMsg; } else { output.success = false; output.msgError = "Dialog is not found"; } } rez.msgForOwner = output; return(rez); }
private OutputSocketMessageWithUsers sendmsg(Object val, Guid myPublicLogin) { #region Тестовые данные /* * { * "execFun": "sendMsg", * "data": { * "recipientId": "788FEFAD0ED24436AD73D968685110E8", * "recipientLogin": "******", * "toGroup": "false", * "textMsg": "test message for one user", * "guidMsg": "91D8333FA55B40AFB46CA63E214C93C8", * "sendTime": "1511450497620", * "curFrg":"1", * "totalFrg":"2" * } * } * * { * "execFun": "sendMsg", * "data": { * "recipientId": "48A0CA0657DE4FB09CDC86008B2A8EBE", * "toGroup": "true", * "textMsg": "test message for group", * "guidMsg": "CA5BBD6B488941FEACFA19692D3087E0", * "sendTime": "1511450497620", * "curFrg":"1", * "totalFrg":"2" * } * } * { * "execFun": "sendMsg", * "data": { * "recipientId": "80f7efc032dd4a7c97f69fca51ad3000", * "toGroup": "false", * "textMsg": "response fo test message", * "guidMsg": "19D2B66BB477467ABAE72AC79F5A2C48", * "sendTime": "1511450497620", * "curFrg":"1", * "totalFrg":"2" * } * } * { * "execFun": "sendMsg", * "data": { * "recipientId": "48A0CA0657DE4FB09CDC86008B2A8EBE", * "toGroup": "true", * "textMsg": "response for group test message", * "guidMsg": "3D45AF8702CA4857A03D7EBD90D95C89", * "sendTime": "1511450497620", * "curFrg":"1", * "totalFrg":"2" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("sendMsg", true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); OutGetMsgInfo outputForOther = null; InputMsgInfo info = DeserObj <InputMsgInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new CloudChatEntities()) { Guid recepId = info.recipientId; if (info.toGroup) { if (!db.groups.Any(it => it.group_id == info.recipientId)) { output.success = false; output.msgError = "Group is not found"; rez.msgForOwner = output; return(rez); } } else { if (!db.members.Any(it => it.public_id == info.recipientId || it.login.Equals(info.recipientLogin.Trim(), StringComparison.CurrentCultureIgnoreCase))) { output.success = false; output.msgError = "User is not found"; rez.msgForOwner = output; return(rez); } recepId = db.members.FirstOrDefault(it => it.public_id == info.recipientId || it.login.Equals(info.recipientLogin.Trim(), StringComparison.CurrentCultureIgnoreCase)).public_id; } if (output.success) { content_over_8000 msg = new content_over_8000(); msg.shar_id = info.msgId; msg.file_data = Encoding.Unicode.GetBytes(info.textMsg); db.content_over_8000.Add(msg); shares newShare = new shares(); newShare.id = info.msgId; newShare.owner_private = db.usp_membersSelect(myPublicLogin).First().private_id; newShare.to_public = recepId; newShare.self_one_or_group = info.toGroup.ToString(); newShare.content = msg; newShare.current_fragment = info.curFrg; newShare.total_fragment = info.totalFrg; newShare.sending_date = info.sendTime; newShare.file_extention = "none"; db.shares.Add(newShare); db.SaveChanges(); string groupName = ""; if (info.toGroup) { groupName = db.groups.Where(it => it.group_id == recepId).FirstOrDefault().group_name_part; } else { groupName = db.members.FirstOrDefault(it => it.public_id == recepId).login; } string login = db.members.FirstOrDefault(it => it.private_id == newShare.owner_private).login; outputForOther = new OutGetMsgInfo(info.msgId, info.textMsg, myPublicLogin, info.toGroup.ToString(), recepId, info.sendTime, info.curFrg, info.totalFrg, login, groupName); if (info.toGroup) { db.group_members.Where(it => it.group_id == recepId && it.member_id != newShare.owner_private) .ToList() .ForEach(it => rez.usersId.Add( db.members.First(m => m.private_id == it.member_id).public_id ) ); } else { //rez.usersId.Add(info.login); rez.usersId.Add(recepId); } } } output.data = outputForOther; rez.msgForOwner = output; rez.msgForOther = output; // rez.msgForOther = new { callFunction="newMessage", data = outputForOther } ; return(rez); }