Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        /// <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);
        }