Пример #1
0
 /// <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;
         }
     }
 }
Пример #2
0
 /// <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);
         }
     }
 }
Пример #3
0
 /// <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);
         }
     }
 }
Пример #4
0
 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);
 }
Пример #5
0
 /// <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;
         }
     }
 }
Пример #6
0
 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);
         }
     }
 }
Пример #7
0
 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);
 }
Пример #8
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);
    }
Пример #9
0
 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);
 }
Пример #10
0
    /// <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();
            }
        }
    }