public override Task <UpdateShowListResult> UpdatePostShowListFun(UpdateMemberPostShowList request, ServerCallContext context) { UpdateShowListResult ret = new UpdateShowListResult(); ret.Result = 0; try { UpdatePostShowList rData = new UpdatePostShowList { MemberID = request.MemberID }; string sData = JsonConvert.SerializeObject(rData); JObject jsMain = new JObject(); jsMain.Add("CmdID", (int)C2S_CmdID.emUpdatePostShowList); jsMain.Add("Data", JsonConvert.DeserializeObject <JObject>(sData)); MsgInfo info = new MsgInfo(jsMain.ToString(), this.SendToClient); this.addQueue?.Invoke(info); ret.Result = 1; } catch (Exception ex) { Console.WriteLine($"{ex.Message}"); SaveLog($"[Error] gRpcImpl::UpdatePostShowListFun, Catch Error, Msg:{ex.Message}"); } return(Task.FromResult(ret)); }
/// <summary> /// 更新密碼 /// </summary> /// <param name="data"> 封包資料 </param> /// <returns> 結果 </returns> //public string OnUpdatePassword(string data) //{ // string ret = ""; // UpdatePassword packet = JsonConvert.DeserializeObject<UpdatePassword>(data); // UpdatePasswordResult rData = new UpdatePasswordResult(); // rData.Action = packet.Action; // try // { // UserAccount account = GetSql().Queryable<UserAccount>().With(SqlSugar.SqlWith.RowLock).Where(it => it.MemberID == packet.MemberID).Single(); // // 有找到帳號 // if (account != null) // { // bool canUpdate = false; // SaveLog($"[Warning] MessageFcunction::OnUpdateUserInfo, Member:{packet.MemberID} Action:{packet.Action}"); // if (packet.Action == (int)UpdatePassword.ActionDefine.emAction_UpdatePwd) // { // // 舊密碼相同 // if (account.Password == packet.Password) // { // canUpdate = true; // } // else // { // canUpdate = false; // rData.Result = (int)UpdatePasswordResult.ResultDefine.emResult_OldPwdError; // SaveLog($"[Warning] MessageFcunction::OnUpdateUserInfo, Member:{packet.MemberID} Old Password Error"); // } // } // // 忘記密碼可直接修改 // else if (packet.Action == (int)UpdatePassword.ActionDefine.emAction_ForgetPwd) // { // canUpdate = true; // } // if (canUpdate) // { // if (GetSql().Updateable<UserAccount>().SetColumns(it => new UserAccount() { Password = packet.NewPassword }).With(SqlSugar.SqlWith.RowLock).Where(it => it.MemberID == packet.MemberID).ExecuteCommand() > 0) // { // rData.Result = (int)UpdatePasswordResult.ResultDefine.emResult_Success; // account.Password = packet.NewPassword; // GetRedis((int)Connect.RedisDB.emRedisDB_User).HashSet($"UserAccount_" + account.Email, hashTransfer.TransToHashEntryArray(account)); // SaveLog($"[Warning] MessageFcunction::OnUpdateUserInfo Member:{packet.MemberID} Update Password Success "); // } // else // { // rData.Result = (int)UpdatePasswordResult.ResultDefine.emResult_Fail; // SaveLog($"[Warning] MessageFcunction::OnUpdateUserInfo Member:{packet.MemberID} Can Not Change Password"); // } // } // else // { // rData.Result = (int)UpdatePasswordResult.ResultDefine.emResult_Fail; // SaveLog($"[Warning] MessageFcunction::OnUpdateUserInfo Member:{packet.MemberID} Update Fail"); // } // } // else // { // rData.Result = (int)UpdatePasswordResult.ResultDefine.emResult_Fail; // SaveLog($"[Warning] MessageFcunction::OnUpdateUserInfo Can Not Find Account:{packet.MemberID}"); // } // } // catch (Exception ex) // { // SaveLog($"[Error] MessageFcunction::OnUpdateUserInfo Catch Error, Msg:{ex.Message}"); // rData.Result = (int)UpdatePasswordResult.ResultDefine.emResult_Fail; // } // JObject jsMain = new JObject(); // jsMain.Add("CmdID", (int)S2C_CmdID.emUpdatePasswordResult); // jsMain.Add("Data", JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeObject(rData))); // ret = jsMain.ToString(); // return ret; //} /// <summary> /// 更新好友列表 /// </summary> /// <param name="data"> 封包資料 </param> /// <returns> 結果 </returns> public string OnUpdateFriendList(string data) { string ret = ""; UpdateFriendList packet = JsonConvert.DeserializeObject <UpdateFriendList>(data); UpdateFriendListResult rData = new UpdateFriendListResult(); rData.Action = packet.Action; UserInfo userInfo_Invite = null; // 邀請者 UserInfo userInfo_Friend = null; // 被邀請者 try { // 不能為同一人 if (packet.MemberID != packet.FriendID) { userInfo_Invite = GetSql().Queryable <UserInfo>().With(SqlSugar.SqlWith.RowLock).Where(it => it.MemberID == packet.MemberID).Single(); // 有找到會員資料 if (userInfo_Invite != null) { userInfo_Friend = GetSql().Queryable <UserInfo>().With(SqlSugar.SqlWith.RowLock).Where(it => it.MemberID == packet.FriendID).Single(); // 有找到好友的會員資料 if (userInfo_Invite != null) { JArray jaData_User = JArray.Parse(userInfo_Invite.FriendList); List <string> friendList_User = jaData_User.ToObject <List <string> >(); JArray jaData_Friend = JArray.Parse(userInfo_Friend.FriendList); List <string> friendList_Friend = jaData_Friend.ToObject <List <string> >(); // 新增 if (packet.Action == (int)UpdateFriendList.ActionDefine.emAction_Add) { if (!friendList_User.Contains(packet.FriendID) && !friendList_Friend.Contains(packet.MemberID)) { friendList_User.Add(packet.FriendID); friendList_Friend.Add(packet.MemberID); rData.Result = (int)UpdateFriendListResult.ResultDefine.emResult_Success; } else { rData.Result = (int)UpdateFriendListResult.ResultDefine.emResult_Fail; } } // 刪除 else if (packet.Action == (int)UpdateFriendList.ActionDefine.emAction_Delete) { if (friendList_User.Contains(packet.FriendID) && friendList_Friend.Contains(packet.MemberID)) { friendList_User.Remove(packet.FriendID); friendList_Friend.Remove(packet.MemberID); rData.Result = (int)UpdateFriendListResult.ResultDefine.emResult_Success; } else { rData.Result = (int)UpdateFriendListResult.ResultDefine.emResult_Fail; } } if (rData.Result == (int)UpdateFriendListResult.ResultDefine.emResult_Success) { JArray jsUser = JArray.FromObject(friendList_User); JArray jsFriend = JArray.FromObject(friendList_Friend); // 設定DB 交易的起始點 GetSql().BeginTran(); if (GetSql().Updateable <UserInfo>().SetColumns(it => new UserInfo() { FriendList = jsUser.ToString() }).With(SqlSugar.SqlWith.RowLock).Where(it => it.MemberID == packet.MemberID).ExecuteCommand() > 0 && GetSql().Updateable <UserInfo>().SetColumns(it => new UserInfo() { FriendList = jsFriend.ToString() }).With(SqlSugar.SqlWith.RowLock).Where(it => it.MemberID == packet.FriendID).ExecuteCommand() > 0) { rData.Result = (int)UpdateFriendListResult.ResultDefine.emResult_Success; userInfo_Invite.FriendList = jsUser.ToString(); userInfo_Friend.FriendList = jsFriend.ToString(); SaveLog($"[Info] MessageFcunction::OnUpdateFriendList Member: {packet.MemberID} Update FriendList Success"); // 發送推播通知 { if (packet.Action == (int)UpdateFriendList.ActionDefine.emAction_Add) { UserAccount friendAccount = GetSql().Queryable <UserAccount>().With(SqlSugar.SqlWith.RowLock).Where(it => it.MemberID == packet.FriendID).Single(); if (friendAccount != null) { string sTitle = $"好友通知"; string sNotifyMsg = $"{userInfo_Invite.NickName} 將您加入好友"; ntMsg.NotifyMsgToDevice(friendAccount.NotifyToken, sTitle, sNotifyMsg, (int)NotifyID.User_AddFriend); } } } } else { rData.Result = (int)UpdateFriendListResult.ResultDefine.emResult_Fail; SaveLog($"[Error] MessageFcunction::OnUpdateFriendList Member: {packet.MemberID} Update FriendList Fail"); } } } else { rData.Result = (int)UpdateFriendListResult.ResultDefine.emResult_Fail; SaveLog($"[Error] MessageFcunction::OnUpdateFriendList Can Not Find Firend Member:{packet.FriendID}"); } } else { rData.Result = (int)UpdateFriendListResult.ResultDefine.emResult_Fail; SaveLog($"[Error] MessageFcunction::OnUpdateFriendList Can Not Find Member:{packet.MemberID}"); } } else { rData.Result = (int)UpdateFriendListResult.ResultDefine.emResult_Fail; SaveLog($"[Error] MessageFcunction::OnUpdateFriendList Member: {packet.MemberID} Is Same With Friend Member: {packet.FriendID}"); } } catch (Exception ex) { SaveLog($"[Error] MessageFcunction::OnUpdateFriendList Catch Error, Msg:{ex.Message}"); rData.Result = (int)UpdateFriendListResult.ResultDefine.emResult_Fail; } if (rData.Result == (int)UpdateBlackListResult.ResultDefine.emResult_Success) { // DB 交易提交 GetSql().CommitTran(); GetRedis((int)Connect.RedisDB.emRedisDB_User).HashSet($"UserInfo_" + userInfo_Invite.MemberID, hashTransfer.TransToHashEntryArray(userInfo_Invite)); GetRedis((int)Connect.RedisDB.emRedisDB_User).HashSet($"UserInfo_" + userInfo_Friend.MemberID, hashTransfer.TransToHashEntryArray(userInfo_Friend)); // 更新Redis的新增好友列表 { // 新增/刪除好友的會員 { string dateTime = DateTime.UtcNow.ToString("yyyy-MM-dd hh:mm:ss"); string sKey = $"NewFriendList_" + packet.MemberID; string sNewFriendList = "[]"; if (GetRedis((int)Connect.RedisDB.emRedisDB_User).KeyExists(sKey)) { sNewFriendList = GetRedis((int)Connect.RedisDB.emRedisDB_User).StringGet(sKey); } JArray jsNewFriendList = JArray.Parse(sNewFriendList); JArray jsNewFriendInfo = new JArray(); jsNewFriendInfo.Add(packet.FriendID); jsNewFriendInfo.Add(dateTime); if (packet.Action == (int)UpdateFriendList.ActionDefine.emAction_Add) { jsNewFriendList.Add(jsNewFriendInfo); } else { foreach (JArray jsInfo in jsNewFriendList) { if (jsInfo[0].ToString() == packet.FriendID) { jsNewFriendList.Remove(jsInfo); break; } } } GetRedis((int)Connect.RedisDB.emRedisDB_User).StringSet(sKey, jsNewFriendList.ToString()); } // 被加好友的會員 { string dateTime = DateTime.UtcNow.ToString("yyyy-MM-dd hh:mm:ss"); string sKey = $"NewFriendList_" + packet.FriendID; string sNewFriendList = "[]"; if (GetRedis((int)Connect.RedisDB.emRedisDB_User).KeyExists(sKey)) { sNewFriendList = GetRedis((int)Connect.RedisDB.emRedisDB_User).StringGet(sKey); } JArray jsNewFriendList = JArray.Parse(sNewFriendList); JArray jsNewFriendInfo = new JArray(); jsNewFriendInfo.Add(packet.MemberID); jsNewFriendInfo.Add(dateTime); if (packet.Action == (int)UpdateFriendList.ActionDefine.emAction_Add) { jsNewFriendList.Add(jsNewFriendInfo); } else { foreach (JArray jsInfo in jsNewFriendList) { if (jsInfo[0].ToString() == packet.MemberID) { jsNewFriendList.Remove(jsInfo); break; } } } GetRedis((int)Connect.RedisDB.emRedisDB_User).StringSet(sKey, jsNewFriendList.ToString()); } } try { // 傳送資料到Post Service, 更新塗鴉牆 var postClient = GRPCClient.Instance.GetClient(); UpdateMemberPostShowList updateInfo = new UpdateMemberPostShowList(); updateInfo.MemberID = packet.MemberID; if (postClient != null) { var reply = postClient.UpdatePostShowListFun(updateInfo); } } catch (Exception postEx) { SaveLog($"[Error] Controller::OnUpdateFriendList, Post GRPC Catch Error, Msg:{postEx.Message}"); } } else { // DB 交易失敗, 啟動Rollback GetSql().RollbackTran(); } JObject jsMain = new JObject(); jsMain.Add("CmdID", (int)S2C_CmdID.emUpdateFriendListResult); jsMain.Add("Data", JsonConvert.DeserializeObject <JObject>(JsonConvert.SerializeObject(rData))); ret = jsMain.ToString(); return(ret); }