public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* * { * "execFun": "sendMsg", * "data": { * "dialogId": "788FEFAD0ED24436AD73D968685110E8", * "textMsg": "test message for one user", * "guidMsg": "91D8333FA55B40AFB46CA63E214C93C8", * "curFrg":"1", * "totalFrg":"2", * "transactionId": "80f7efc032dd4a1c97f69fca51ad1100", * "deathDate": "2511450497620" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("sendMsg", actId, true, "", new { }); OutputSocketMessage outputOther = new OutputSocketMessage("sendMsg", Guid.Empty, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); InputMsgInfo info = DeserializeObject.ParseJSON <InputMsgInfo>(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.Groups.Any(it => it.group_id == info.dialogId && it.MemberInGroup.Any(mg => mg.group == it && mg.member == owner))) //Check created group and member in this group { if (!db.Shares.Any(it => it.id == info.msgId)) //Check exist message with Id { Groups gr = db.Groups.Include(s => s.Shares).First(it => it.group_id == info.dialogId); Console.WriteLine(SystemClock.GetInstance().CurrentTime.ToString()); Shares msg = new Shares { id = info.msgId, owner = owner, current_fragment = info.curFrg, total_fragment = info.totalFrg, file_data = Encoding.Unicode.GetBytes(info.textMsg), file_extention = "none", kb_size = 0, sending_date = SystemClock.GetInstance().CurrentTime, // DateTimeOffset.Now.ToUnixTimeSeconds(), death_date = info.deathDate > 0 ? DateConvert.validateTimestamp(SystemClock.GetInstance().CurrentTime + info.deathDate) : DateTimeOffset.Now.AddYears(2000).ToUnixTimeSeconds(), to_group = gr }; gr.Shares.Add(msg); db.Shares.Add(msg); Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.SHARES, msg.id.ToString(), owner); db.SaveChanges(); List <MemberInGroup> membersInGroup = db.MemberInGroup.Include(m => m.member) .Where(it => it.group == gr && it.member != owner).ToList(); membersInGroup.ForEach(it => rez.forUserLogin.Add(it.member.login)); string groupNameForOwner = gr.group_name_part, groupNameForOther = gr.group_name_part; if (gr.one_to_one) { groupNameForOwner = membersInGroup.First(it => it.member != owner).member.nick_name; groupNameForOther = owner.nick_name; } OneMessageInfo newMsg = new OneMessageInfo(msg.id, info.textMsg, msg.current_fragment, msg.total_fragment, msg.sending_date, owner.nick_name, msg.owner.login); output.data = new OutGetMsgInfo(gr.group_id, groupNameForOwner, gr.one_to_one, gr.privated, new List <OneMessageInfo>() { newMsg }); outputOther.data = new OutGetMsgInfo(gr.group_id, groupNameForOther, gr.one_to_one, gr.privated, new List <OneMessageInfo>() { newMsg }); Transaction.removeMessageAboveLimit(gr); } else { output.success = false; output.msgError = "Message with this ID is exist"; output.data = new { id = info.msgId }; rez.msgForOwner = output; return(rez); } } else { output.success = false; output.msgError = "Dialog is not found"; rez.msgForOwner = output; return(rez); } } rez.msgForOwner = output; rez.msgForOther = outputOther; 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); }