Esempio n. 1
0
        public static void InitSdk()
        {
            if (!SdkStatus.IsUnInit())
            {
                return;
            }
            if (User != null)
            {
                UnInitSdk();
            }
            // 正在初始化
            SdkStatus.SetStatus(SdkStatus.StatusType.Initing);

            Core.InitModules();
            BaseNetUtil.StopQueueLoop();
            BaseNetUtil.StartQueueLoop();

            // 设置 Socket 链接地址
            Socket1.Url = Config.Url;

            // loginEvent += onSocketConnect;
            ListenSocketConnect();

            Socket1.ConnectSocketTask("init Sdk");
        }
Esempio n. 2
0
 public void Start()
 {
     Socket1.SendBufferSize    = 4096;
     Socket1.ReceiveBufferSize = 4096;
     MyStream = Socket1.GetStream();
     Array.Resize(ref _readBuff, Socket1.ReceiveBufferSize);
     MyStream.BeginRead(_readBuff, 0, Socket1.ReceiveBufferSize, OnReceiveData, null);
 }
Esempio n. 3
0
        private static void UnInitModules()
        {
            Socket1?.DestroySocketTask();
            Socket2?.DestroySocketTask();
            var route = new BaseNetUtil[8] {
                User, Room, Sender, Matcher, FrameSender.NetUtil1, FrameSender.NetUtil2, Pinger1, Pinger2
            };

            foreach (var request in route)
            {
                request?.UnbindSocket();
            }
        }
Esempio n. 4
0
        private static void ListenSocketConnect()
        {
            // 联网
            Socket1.OnEvent("connect", (SocketEvent socketEvent) =>
            {
                // 联网时自动Login
                if (!UserStatus.IsStatus(UserStatus.StatusType.Logining))
                {
                    UserUtil.Login(null);
                }

                if (string.IsNullOrEmpty(Socket1.Url))
                {
                    return;
                }
                var eve = new ResponseEvent(ErrCode.EcOk)
                {
                    Data = Socket1.Id
                };
                Sdk.Responses.OnNetwork(eve);
            });
            Socket2.OnEvent("connect", (SocketEvent socketEvent) =>
            {
                // check login 成功后发送业务数据
                FrameSender.CheckLogin(null, "connect " + !!Socket2.IsSocketStatus("connect"));
                if (!string.IsNullOrEmpty(Socket2.Url))
                {
                    var eve = new ResponseEvent(ErrCode.EcOk)
                    {
                        Data = Socket2.Id
                    };
                    Sdk.Responses.OnNetwork(eve);
                }
                Pinger2.Ping(null);
            });

            // 断网
            Socket1.OnEvent("connectClose", (SocketEvent socketEvent) =>
            {
                // 初始化失败
                SdkInitCallback(false, new ResponseEvent(ErrCode.EcSdkSocketClose));
                if (!SdkStatus.IsInited())
                {
                    return;
                }
                // 断网时自动 Logout
                UserStatus.SetStatus(UserStatus.StatusType.Logout);
                if (string.IsNullOrEmpty(Socket1.Url))
                {
                    return;
                }
                var eve = new ResponseEvent(ErrCode.EcSdkSocketClose, "Socket 断开", null, null);
                Sdk.Responses.OnNetwork(eve);
            });
            Socket2.OnEvent("connectClose", (SocketEvent socketEvent) =>
            {
                if (!SdkStatus.IsInited())
                {
                    return;
                }
                Debugger.Log("socket2 on connect close");
                CheckLoginStatus.SetStatus(CheckLoginStatus.StatusType.Offline);
                if (!string.IsNullOrEmpty(Socket2.Url))
                {
                    var eve = new ResponseEvent(ErrCode.EcSdkSocketClose, "Socket 断开", null, null);
                    Sdk.Responses.OnNetwork(eve);
                }
                ;
                Pinger2.Stop();
            });

            // socket 错误
            Socket1.OnEvent("connectError", (SocketEvent socketEvent) =>
            {
                // 初始化失败
                SdkInitCallback(false, new ResponseEvent(ErrCode.EcSdkSocketError));
                if (!SdkStatus.IsInited())
                {
                    return;
                }
                if (string.IsNullOrEmpty(Socket1.Url))
                {
                    return;
                }
                var eve = new ResponseEvent(ErrCode.EcSdkSocketError, "Socket 错误", null, null);
                Sdk.Responses.OnNetwork(eve);
            });
            Socket2.OnEvent("connectError", (SocketEvent socketEvent) =>
            {
                if (!SdkStatus.IsInited())
                {
                    return;
                }
                if (string.IsNullOrEmpty(Socket2.Url))
                {
                    return;
                }
                var eve = new ResponseEvent(ErrCode.EcSdkSocketError, "Socket 错误", null, null);
                Sdk.Responses.OnNetwork(eve);
            });

            // 需要自动登录
            Socket1.OnEvent("autoAuth", (SocketEvent socketEvent) =>
            {
                if (!SdkStatus.IsInited())
                {
                    return;
                }
                var timer = new Timer();
                timer.SetTimeout(() =>
                {
                    var isLogout = UserStatus.IsStatus(UserStatus.StatusType.Logout);
                    if (!string.IsNullOrEmpty(Socket1.Url) && isLogout)
                    {
                        UserUtil.Login(null);
                    }
                    ;
                }, 1000);
            });
            Socket2.OnEvent("autoAuth", (SocketEvent socketEvent) =>
            {
                if (!SdkStatus.IsInited())
                {
                    return;
                }
                if (string.IsNullOrEmpty(Socket2.Url))
                {
                    return;
                }
                var timer = new Timer();
                timer.SetTimeout(() =>
                {
                    // Debugger.Log("auto auth check 1");
                    // 检查是否需要重登录
                    if (UserStatus.IsStatus(UserStatus.StatusType.Logout))
                    {
                        UserUtil.Login(null);
                    }

                    // 检查是否需要 checkLogin
                    var info = FrameSender.RoomInfo ?? new RoomInfo {
                        RouteId = ""
                    };
                    // Debugger.Log("auto auth check 2: {0}", CheckLoginStatus.GetRouteId() != info.RouteId);

                    if (CheckLoginStatus.IsOffline() || CheckLoginStatus.GetRouteId() != info.RouteId)
                    {
                        FrameSender.CheckLogin((ResponseEvent eve) =>
                        {
                            if (eve.Code == ErrCode.EcOk)
                            {
                                Pinger2.Ping(null);
                            }
                        }, "autoAuth");
                    }
                }, 1000);
            });
        }
Esempio n. 5
0
 public void Close()
 {
     Socket1.Close();
     Socket2.Close();
 }
Esempio n. 6
0
 private void CloseConnection()
 {
     Socket1.Close();
     Socket1 = null;
     Console.WriteLine("Connection of client index: " + Index + " closed and destroyed.");
 }