private async ETTask RunAsync(Player player, C2L_RefreshStranger message, Action <L2C_RefreshStranger> reply)
        {
            L2C_RefreshStranger response = new L2C_RefreshStranger();

            try
            {
                long uid = player.uid;
                Tuple <List <RelationshipSimpleInfo>, long> tuple = await RelationshipDataHelper.GetStrangers(uid, message.Skip, message.Limit);

                List <RelationshipSimpleInfo> relationships = tuple.Item1;
                long totalCount = tuple.Item2;
                RepeatedField <RelationshipSimpleInfo> list = new RepeatedField <RelationshipSimpleInfo>();
                foreach (var info in relationships)
                {
                    list.Add(info);
                }

                response.TotalCount       = totalCount;
                response.RelationshipList = list;
                response.Error            = ErrorCode.ERR_Success;
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
        private async ETTask RunAsync(Player player, C2L_RefreshRelationshipApply message, Action <L2C_RefreshRelationshipApply> reply)
        {
            L2C_RefreshRelationshipApply response = new L2C_RefreshRelationshipApply();

            try
            {
                long uid = player.uid;
                List <RelationshipApplyInfo> relationApplyInfos = null;
                if (message.IsRequested)
                {
                    relationApplyInfos = await RelationshipDataHelper.GetRelationshipApplyInfoBySenderUid(uid);
                }
                else
                {
                    relationApplyInfos = await RelationshipDataHelper.GetRelationshipApplyInfoByReceiverUid(uid);
                }
                response.TotalCount = relationApplyInfos.Count;
                response.RelationshipApplyList.AddRange(relationApplyInfos);
                response.Error = ErrorCode.ERR_Success;
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Exemplo n.º 3
0
        private async ETVoid RunAsync(Player player, C2L_GetRelationshipApplyList message, Action <L2C_GetRelationshipApplyList> reply)
        {
            L2C_GetRelationshipApplyList response = new L2C_GetRelationshipApplyList();

            try
            {
                long uid = player.uid;
                if (uid == 0)
                {
                    //未被Gate授權的帳戶
                    response.Error = ErrorCode.ERR_ConnectGateKeyError;
                }
                else
                {
                    List <RelationshipApplyInfo> relationApplyInfos = null;
                    if (message.IsRequested)
                    {
                        relationApplyInfos = await RelationshipDataHelper.GetRelationshipApplyInfoBySenderUid(uid);
                    }
                    else
                    {
                        relationApplyInfos = await RelationshipDataHelper.GetRelationshipApplyInfoByReceiverUid(uid);
                    }
                    response.TotalCount = relationApplyInfos.Count;
                    response.RelationshipApplyList.AddRange(relationApplyInfos);
                }
                response.Error = ErrorCode.ERR_Success;
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
        private async ETTask RunAsync(Player player, C2L_AddRelationship message, Action <L2C_AddRelationship> reply)
        {
            L2C_AddRelationship response = new L2C_AddRelationship();

            try
            {
                long uid = player.uid;
                //Apply
                var relationshipApply = await RelationshipDataHelper.AddRelationshipApply(uid, message.Uid);

                if (relationshipApply == null)
                {
                    response.Error = ErrorCode.ERR_RelationshipApplyInfo_AddFailed;
                    reply(response);
                    return;
                }
                response.Error = ErrorCode.ERR_Success;
                reply(response);

                // 確認玩家是在線,在線的話傳送好友資訊
                var relationshipApplyInfo = RelationshipApply.ConvertToRelationshipApplyInfo(relationshipApply);
                var uidUser = await UserDataHelper.FindOneUser(uid);

                var receiverUidUser = await UserDataHelper.FindOneUser(message.Uid);

                var    proxy      = Game.Scene.GetComponent <CacheProxyComponent>();
                var    playerSync = proxy.GetMemorySyncSolver <Player>();
                Player target     = playerSync.Get <Player>(message.Uid);
                if (target != null)
                {
                    var notifyRelationshipState_SenderNotRequested = new L2C_NotifyRelationshipApplyState()
                    {
                        AddApplyInfo = relationshipApplyInfo,
                        IsRequested  = false,
                    };
                    GateMessageHelper.BroadcastTarget(notifyRelationshipState_SenderNotRequested, message.Uid);
                }

                //傳給自己更新Apply列表
                var notifyRelationshipState_SenderIsRequested = new L2C_NotifyRelationshipApplyState()
                {
                    AddApplyInfo = relationshipApplyInfo,
                    IsRequested  = true,
                };
                GateMessageHelper.BroadcastTarget(notifyRelationshipState_SenderIsRequested, uid);

                // 推播告知receiverUser
                var firebase = Game.Scene.GetComponent <FirebaseComponent>();
                var lang     = Game.Scene.GetComponent <LanguageComponent>();
                // 7 = {0}向你發出好友邀請!
                var body = lang.GetString(receiverUidUser.language, 7);
                await firebase.SendOneNotification(receiverUidUser.firebaseDeviceToken, string.Empty, string.Format(body, uidUser.name));
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
        private async ETTask RunAsync(Player player, C2L_QueryRelationshipByUids message, Action <L2C_QueryRelationshipByUids> reply)
        {
            L2C_QueryRelationshipByUids response = new L2C_QueryRelationshipByUids();

            try
            {
                long uid    = player.uid;
                var  result = await RelationshipDataHelper.QueryByUids(uid, message.Uids.ToArray());

                response.RelationshipList = result;
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Exemplo n.º 6
0
        private async ETTask RunAsync(Player player, C2L_QueryRelationshipByName message, Action <L2C_QueryRelationshipByName> reply)
        {
            L2C_QueryRelationshipByName response = new L2C_QueryRelationshipByName();

            try
            {
                long uid    = player.uid;
                var  result = await RelationshipDataHelper.QueryLikeName(uid, message.Name);

                response.RelationshipList = result;
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
        private async ETTask RunAsync(Player player, C2L_GetRelationshipList message, Action <L2C_GetRelationshipList> reply)
        {
            L2C_GetRelationshipList response = new L2C_GetRelationshipList();

            try
            {
                long uid = player.uid;
                if (uid == 0)
                {
                    //未被Gate授權的帳戶
                    response.Error = ErrorCode.ERR_ConnectGateKeyError;
                }
                else
                {
                    List <RelationshipSimpleInfo> relations = await RelationshipDataHelper.GetUserRelationshipSimpleInfoList(uid);

                    Tuple <List <RelationshipSimpleInfo>, long> tuple = await RelationshipDataHelper.GetStrangers(uid);

                    List <RelationshipSimpleInfo> stranger = tuple.Item1;
                    long totalCount = tuple.Item2;
                    RepeatedField <RelationshipSimpleInfo> list = new RepeatedField <RelationshipSimpleInfo>();
                    var linq = Enumerable.Union(relations, stranger);
                    foreach (var info in linq)
                    {
                        list.Add(info);
                    }
                    response.TotalCount       = totalCount;
                    response.RelationshipList = list;
                }
                response.Error = ErrorCode.ERR_Success;
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
        private async ETTask RunAsync(Player player, C2L_RemoveRelationship message, Action <L2C_RemoveRelationship> reply)
        {
            L2C_RemoveRelationship response = new L2C_RemoveRelationship();

            try
            {
                long uid = player.uid;
                await RelationshipDataHelper.RemoveRelationship(uid, message.Uid);

                response.Error = ErrorCode.ERR_Success;
                reply(response);
                L2C_NotifyRelationshipState notifyRelationshipState = new L2C_NotifyRelationshipState();
                RelationshipSimpleInfo      info = new RelationshipSimpleInfo();
                {
                    info.Uid = uid;
                }
                notifyRelationshipState.Info = info;
                GateMessageHelper.BroadcastTarget(notifyRelationshipState, message.Uid);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
        private async ETTask RunAsync(Player player, C2L_RefuseRelationshipApply message, Action <L2C_RefuseRelationshipApply> reply)
        {
            L2C_RefuseRelationshipApply response = new L2C_RefuseRelationshipApply();

            try
            {
                long uid = player.uid;

                //尋找指定RelationshipApplyInfo
                var targetApplyInfo = await RelationshipDataHelper.GetRelationshipApplyInfoByApplyId(message.ApplyId);

                //判斷是否存在RelationshipApplyInfo
                if (targetApplyInfo == null)
                {
                    response.Error = ErrorCode.ERR_RelationshipApplyInfo_NotFind;
                    reply(response);
                    return;
                }

                //判斷是否為申請目標
                if (targetApplyInfo.ReceiverUid != uid)
                {
                    response.Error = ErrorCode.ERR_RelationshipApplyInfo_NotReceiver;
                    reply(response);
                    return;
                }

                // 刪除關係申請
                await RelationshipDataHelper.RemoveRelationship(targetApplyInfo.ApplyId);

                // 傳送senderUser更新申請列表
                var notifyRelationshipApplyStateIsRequested = new L2C_NotifyRelationshipApplyState()
                {
                    DeleteApplyId = message.ApplyId,
                    IsRequested   = true,
                };
                GateMessageHelper.BroadcastTarget(notifyRelationshipApplyStateIsRequested, targetApplyInfo.SenderUid);

                // 傳送receiverUser更新申請列表
                var notifyRelationshipApplyStateNotRequested = new L2C_NotifyRelationshipApplyState()
                {
                    DeleteApplyId = message.ApplyId,
                    IsRequested   = false,
                };
                GateMessageHelper.BroadcastTarget(notifyRelationshipApplyStateNotRequested, targetApplyInfo.ReceiverUid);

                var uidUser = await UserDataHelper.FindOneUser(uid);

                var senderUser = await UserDataHelper.FindOneUser(targetApplyInfo.SenderUid);

                // 推播告知senderUser
                var firebase = Game.Scene.GetComponent <FirebaseComponent>();
                var lang     = Game.Scene.GetComponent <LanguageComponent>();
                // 8 = {0}拒絕你的好友邀請!
                var body = lang.GetString(senderUser.language, 8);
                await firebase.SendOneNotification(senderUser.firebaseDeviceToken, string.Empty, string.Format(body, uidUser.name));

                response.Error = ErrorCode.ERR_Success;
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
        private async ETTask RunAsync(Player player, C2L_AcceptRelationshipApply message, Action <L2C_AcceptRelationshipApply> reply)
        {
            L2C_AcceptRelationshipApply response = new L2C_AcceptRelationshipApply();

            try
            {
                long uid = player.uid;

                //尋找指定RelationshipApplyInfo
                var targetApplyInfo = await RelationshipDataHelper.GetRelationshipApplyInfoByApplyId(message.ApplyId);

                //判斷是否存在RelationshipApplyInfo
                if (targetApplyInfo == null)
                {
                    response.Error = ErrorCode.ERR_RelationshipApplyInfo_NotFind;
                    reply(response);
                    return;
                }

                //判斷是否為申請目標
                if (targetApplyInfo.ReceiverUid != uid)
                {
                    response.Error = ErrorCode.ERR_RelationshipApplyInfo_NotReceiver;
                    reply(response);
                    return;
                }

                //建立關係
                var relationship = await RelationshipDataHelper.AddRelationship(targetApplyInfo.SenderUid, targetApplyInfo.ReceiverUid);

                if (relationship == null)
                {
                    response.Error = ErrorCode.ERR_AddRelationshipRepeatedly;
                    reply(response);
                    return;
                }

                var receiverUser = await UserDataHelper.FindOneUser(targetApplyInfo.ReceiverUid);

                // 刪除關係申請
                await RelationshipDataHelper.RemoveRelationship(targetApplyInfo.ApplyId);

                // 確認senderUser在線, 傳送更新訊息
                var proxy      = Game.Scene.GetComponent <CacheProxyComponent>();
                var playerSync = proxy.GetMemorySyncSolver <Player>();
                var senderUser = await UserDataHelper.FindOneUser(targetApplyInfo.SenderUid);

                var senderPlayer = playerSync.Get <Player>(targetApplyInfo.SenderUid);
                if (senderPlayer != null)
                {
                    // 更新好友列表
                    var notifyRelationshipState_Sender = new L2C_NotifyRelationshipState()
                    {
                        Info = new RelationshipSimpleInfo
                        {
                            DisconnectTime   = 0,
                            Location         = receiverUser.location,
                            Mileage          = receiverUser.playerRideTotalInfo.Mileage,
                            Name             = receiverUser.name,
                            RelationshipType = relationship.relationshipType,
                            Uid = uid
                        }
                    };
                    GateMessageHelper.BroadcastTarget(notifyRelationshipState_Sender, targetApplyInfo.SenderUid);

                    // 更新申請列表
                    var notifyRelationshipApplyStateIsRequested = new L2C_NotifyRelationshipApplyState()
                    {
                        DeleteApplyId = message.ApplyId,
                        IsRequested   = true,
                    };
                    GateMessageHelper.BroadcastTarget(notifyRelationshipApplyStateIsRequested, targetApplyInfo.SenderUid);
                }

                // 推播告知senderUser
                var firebase = Game.Scene.GetComponent <FirebaseComponent>();
                var lang     = Game.Scene.GetComponent <LanguageComponent>();
                // 1 = {0}接受你的好友邀請!
                var body = lang.GetString(senderUser.language, 1);
                await firebase.SendOneNotification(senderUser.firebaseDeviceToken, string.Empty, string.Format(body, receiverUser.name));

                response.Error = ErrorCode.ERR_Success;
                reply(response);

                // 傳送receiverUser更新申請列表
                var notifyRelationshipApplyStateNotRequested = new L2C_NotifyRelationshipApplyState()
                {
                    DeleteApplyId = message.ApplyId,
                    IsRequested   = false,
                };
                GateMessageHelper.BroadcastTarget(notifyRelationshipApplyStateNotRequested, targetApplyInfo.ReceiverUid);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }