示例#1
0
            public override IEnumerator OnReceive(SESSION_T session, Gamnet.Packet packet)
            {
                Debug.Assert(Gamnet.Util.Debug.IsMainThread());
                //Debug.Log($"Gamnet.Server.Session.PacketHandler_EstablishSessionLink.OnReceive");
                SystemPacket.MsgCliSvr_EstablishSessionLink_Req req = packet.Deserialize <SystemPacket.MsgCliSvr_EstablishSessionLink_Req>();
                SystemPacket.MsgSvrCli_EstablishSessionLink_Ans ans = new SystemPacket.MsgSvrCli_EstablishSessionLink_Ans();

                ans.error_code = 0;
                try
                {
                    if (string.Empty != session.session_token)
                    {
                        throw new System.InvalidOperationException($"already linked session");
                    }

                    session.session_token  = System.Guid.NewGuid().ToString();
                    session.link_establish = true;
                    session.OnConnect();
                }
                catch (System.Exception e)
                {
                    ans.error_code = e.HResult;
                    Debug.LogError(e.ToString());
                }

                ans.session_key   = session.session_key;
                ans.session_token = session.session_token;

                Gamnet.Packet ansPacket = new Gamnet.Packet();
                ansPacket.Id = Gamnet.SystemPacket.MsgSvrCli_EstablishSessionLink_Ans.MSG_ID;
                ansPacket.Serialize(ans);
                session.Send(ansPacket);

                yield break;
            }
        private void Send_EstablishSessionLink_Req()
        {
            // Debug.Log($"{Util.Debug.__FUNC__()}");
            SystemPacket.MsgCliSvr_EstablishSessionLink_Req req = new SystemPacket.MsgCliSvr_EstablishSessionLink_Req();

            Gamnet.Packet packet = new Gamnet.Packet();
            packet.Id = SystemPacket.MsgCliSvr_EstablishSessionLink_Req.MSG_ID;
            packet.Serialize(req);
            Send(packet);
        }