/// <summary> /// 连接Tcp服务器 /// </summary> /// <param name="host"></param> /// <param name="port"></param> public void ConnectTcpServer(string host, int port, string bgphost, int bgpport, SocketName _socketName, ConnectDelegate callBack, bool bgpConnect) { for (int i = 0; i < TcpPros.Length; i++) { if (TcpPros[i] == null) { TcpPros[i] = new ProtoInfo(); TcpPros[i].socketName = _socketName; TcpPros[i].host = host; TcpPros[i].port = port; TcpPros[i].bdphost = bgphost; TcpPros[i].bdpport = bgpport; TcpPros[i].outSetWork = true; TcpPros[i].pro = gameObject.AddComponent <ProtoLayer>(); } if (TcpPros[i].socketName == _socketName) { TcpPros[i].host = host; TcpPros[i].port = port; TcpPros[i].bdphost = bgphost; TcpPros[i].bdpport = bgpport; TcpPros[i].outSetWork = true; if (bgpConnect) { TcpPros[i].pro.StartTcpSocket(bgphost, bgpport, _socketName, callBack); } else { TcpPros[i].pro.StartTcpSocket(host, port, _socketName, callBack); } break; } } }
/// <summary> /// 设置是否关闭nagle算法,当组队副本这种实时性比较高的副本,进行关闭 /// </summary> /// <param name="noDelay"></param> public void SetSocketDelay(bool noDelay = false, SocketName _socketName = SocketName.MainSocket) { for (int i = 0; i < TcpPros.Length; i++) { if (TcpPros[i] != null && TcpPros[i].socketName == _socketName) { TcpPros[i].pro.SetSocketDelay(noDelay); } } }
/// <summary> /// 发送tos消息 /// </summary> /// <param name="tos"></param> public void SendTos(object tos, SocketName _socketName = SocketName.MainSocket) { for (int i = 0; i < TcpPros.Length; i++) { if (TcpPros[i] != null && TcpPros[i].socketName == _socketName) { Log.InfoVO(1, tos); TcpPros[i].pro.Send(tos); } } }
public bool IsReconnect(SocketName _socketName = SocketName.MainSocket) { for (int i = 0; i < TcpPros.Length; i++) { if (TcpPros[i] != null && TcpPros[i].socketName == _socketName) { return(TcpPros[i].pro.IsReconnect()); } } return(false); }
/// <summary> /// 关闭网络Socket /// </summary> /// <param name="resetConnect">完全重置连接,如果重练也连接不上后可以重置</param> public void CloseServer(bool resetConnect = false, SocketName _socketName = SocketName.MainSocket) { for (int i = 0; i < TcpPros.Length; i++) { if (TcpPros[i] != null && TcpPros[i].socketName == _socketName) { TcpPros[i].pro.Close(resetConnect); TcpPros[i].outSetWork = false; } } }
public void ReConnectSocket(SocketName _socketName = SocketName.None) { for (int i = 0; i < TcpPros.Length; i++) { if (TcpPros[i] != null && TcpPros[i].socketName == _socketName || _socketName == SocketName.None) { TcpPros[i].outSetWork = true; TcpPros[i].pro.ReStartTcpSocket(ReconnectConnectCallback); } } }
public float GetPingTime(SocketName _socketName = SocketName.MainSocket) { for (int i = 0; i < TcpPros.Length; i++) { ProtoInfo proto = TcpPros[i]; if (proto != null && proto.socketName == _socketName) { proto.pro.HeartBeatInterval = 1; return(proto.pro.PingTime); } } return(0); }
/// <summary> /// 网络重连 /// </summary> private void ToReconnect(object[] _socketName) { if (NetReconnectManager.Instance.CanReconnect == false) { return; } //如果连接上了就不重连 if (LoginManager.Instance.connectResult == ConnectResultType.SocketConnectSuccess) { return; } Log.Debug("LoginModel ConnectCallback 第" + _connectCount + "次重连开始"); string socket = _socketName[1].ToString(); SocketName socketName = (SocketName)Enum.Parse(typeof(SocketName), socket, true); Log.Debug("socketName" + socketName); ReConnectSocket(socketName); }
public void StartTcpSocket(string host, int port, SocketName name, ConnectDelegate _connectback) { Log.Debug("打开一个tcp连接StartTcpSocket"); _host = host; _port = port; if (client == null) { client = new SocketLayer(); } else { Close(true); } socketName = name; connectBack = _connectback; connectBack1 = null; client.SetConnectCallback(ConnectBack); proto = new CProto(); recvBuf = new byte[BUFFER_SIZE * 64]; recvLen = 0; pingByte = new byte[] { (byte)CProto.PType.ping }; client.Connect(host, port); }
/// <summary> /// socket链接回调函数 /// </summary> /// <param name="result">true 链接成功,false 链接失败</param> private void ReconnectConnectCallback(bool result, SocketName socketName) { Log.Debug("ReConnectSocket ConnectCallback result:" + result); SocketName _socketName = socketName; if (result) { if (socketName == SocketName.MainSocket) { _connectCount[0] = 0; } else { _connectCount[1] = 0; } LoginManager.Instance.connectResult = ConnectResultType.SocketConnectSuccess; NetReconnectManager.Instance.HaseConnected = true; NetReconnectManager.Instance.RemoveConnectiong(); } else { if (NetReconnectManager.Instance.CanReconnect == false) { if (socketName == SocketName.MainSocket) { _connectCount[0] = 0; } else { _connectCount[1] = 0; } return; } if (socketName == SocketName.MainSocket) { _connectCount[0]++; } else { _connectCount[1]++; } //按场景设置重连次数 float delay = 2.0f; int MaxCount = NetReconnectManager.CONNECT_SOCKET_COUNT; /* if (ChangeSceneManager.Instance.currentSceneName == SceneName.FightScene) * { * MaxCount = NetReconnectManager.LOGIN_CONNECT_COUNT; * delay = 1.0f; * } * else if (ChangeSceneManager.Instance.currentSceneName == SceneName.FightScene) * { * MaxCount = NetReconnectManager.FIGHT_CONNECT_COUNT; * }*/ if ((socketName == SocketName.MainSocket)?_connectCount[0] < MaxCount: _connectCount[1] < MaxCount) { //TimerManager.Instance.SetTimeOut(ToReconnect, delay, true, false, true, _socketName); } else { Log.Debug("LoginModel ConnectCallback " + _connectCount + "次连接失败后返回"); if (socketName == SocketName.MainSocket) { _connectCount[0] = 0; } else { _connectCount[1] = 0; } LoginManager.Instance.connectResult = ConnectResultType.SocketConnectFail; NetReconnectManager.Instance.ShowUDPError(); } } }