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"); }
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); }
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(); } }
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); }); }
public void Close() { Socket1.Close(); Socket2.Close(); }
private void CloseConnection() { Socket1.Close(); Socket1 = null; Console.WriteLine("Connection of client index: " + Index + " closed and destroyed."); }