Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(209评价)
价格: 3620.00元
请问在PhotonServer中如何做到同一账号同一时间内只允许登录一次的问题
道法自然发起了问答2017-05-15
5
回复
1829
浏览

同一账号同一时间内只允许登录一次,如果当前账号已经登录了,那么第二个人再登录的时候则要提示“账号登录中”,并且不允许第二人登录进入,请问这样要怎么做,谢谢?

所有回复
  • siki 2017-05-15

    在服务器端用集合保存已经登录的账号, 每次登录的时候,检查是否存在,如果已经登录,直接返回登录失败 账号登录中

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 道法自然 2017-05-16

    在MyGameServer中  

    //已登陆的客户端

    public List<ClientPeer> login_peerList = new List<ClientPeer>();

     

     

     

    在LoginHandler中

     

        if (MyGameServer.Instance.login_peerList.Count == 0)
                {
                    if (isSuccess)
                    {
                        response.ReturnCode = (short)ReturnCode.Success;
                       
                        peer.username = userName;
                        MyGameServer.Instance.login_peerList.Add(peer);
                    }
                    else
                    {

                        response.ReturnCode = (short)ReturnCode.Failed;
                       
                    }
                    peer.SendOperationResponse(response, sendParameters);

                }


                foreach (ClientPeer tempPeer in MyGameServer.Instance.login_peerList)
                {
                    if (tempPeer.username != userName) {
                        if (isSuccess)
                        {
                            response.ReturnCode = (short)ReturnCode.Success;
                           
                            peer.username = userName;
                            MyGameServer.Instance.login_peerList.Add(peer);
                        }
                        else
                        {

                            response.ReturnCode = (short)ReturnCode.Failed;
                           
                        }
                        peer.SendOperationResponse(response, sendParameters);

                    }
                }

    然而在PohtonServer 的log中显示

    Exception:System.InvalidOperationException: 集合已修改;可能无法执行枚举操作。
       在 System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
       在 System.Collections.Generic.List`1.Enumerator.MoveNextRare()
     

    同一账号同一时间还是能重复登陆,请问这里哪里错了?

     

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-05-16

    这个集合要放在 application里面,你放在peer里面的话,每个客户端的集合都是不一样的

    放在application里面,让peer去访问application里面的集合,这样所有的peer共享这一个集合

    还有-4条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-05-17

    不是有一个photonapplication吗 就是吧list定义在那里,然后把 photonapplication的对象传递给peer,通过photonapplication的对象访问到list集合

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!