public bool ProcessPacketHeader(ClientSocket clientSocket)
    {
        try {
            IPacketHeader packetHeader = ET_NetworkChannelHelper.DeserializePacketHeader(clientSocket.ReceiveState.Stream);

            if (packetHeader == null)
            {
                string errorMessage = "Packet header is invalid.";
                Debug.LogError(errorMessage);
                throw new Exception(errorMessage);
            }

            clientSocket.ReceiveState.PrepareForPacket(packetHeader);
            if (packetHeader.PacketLength <= 0)   //一般不会满足
            {
                return(ProcessPacket(clientSocket));
            }
        }
        catch (Exception exception) {
            Debug.LogError(exception);
            throw;
        }

        return(true);
    }
    /// <summary>
    /// 发送数据
    /// </summary>
    /// <param name="cs"></param>
    /// <param name="msgBase"></param>
    public void Send(ClientSocket cs, SCPacketBase msgBase)
    {
        KDCommon.Log("send=" + (CMD)msgBase.Id, LogType.Info);
        if (cs == null || !cs.Socket.Connected)
        {
            return;
        }
        bool serializeResult = false;

        try {
            cs.SendState.Reset();
            serializeResult = ET_NetworkChannelHelper.Serialize(msgBase, cs.SendState.Stream);

            try {
                if (serializeResult)
                {
                    cs.SendState.Stream.Position = 0L;
                    SendAsync(cs);
                }
            }
            catch (SocketException ex) {
                Debug.LogError("Socket BeginSend Error:" + ex);
            }
        }
        catch (SocketException ex) {
            Debug.LogError("Socket发送数据失败:" + ex);
        }
        cs.SendState.Stream.Position = 0L;
    }
    public void StartAsServer(string ipstr, int port)
    {
        IPAddress  ip         = IPAddress.Parse(ipstr);
        IPEndPoint ipEndPoint = new IPEndPoint(ip, port);

        m_ListenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        m_ListenSocket.Bind(ipEndPoint);
        m_ListenSocket.Listen(50000);
        ET_NetworkChannelHelper.Initialize();
        Debug.Log("服务器启动监听{0}成功", m_ListenSocket.LocalEndPoint.ToString());

        //while (true) {
        //    //处理找出所有socket
        //    ResetCheckRead();

        //    try {
        //        //最后等待时间单位是微妙
        //        Socket.Select(m_CheckReadList, null, null, 1000);
        //    }
        //    catch (Exception e) {
        //        Debug.LogError(e);
        //    }

        //    for (int i = m_CheckReadList.Count - 1; i >= 0; i--) {
        //        Socket s = m_CheckReadList[i];
        //        if (s == m_ListenSocket) {
        //            //说明有客户端链接到服务器了,所以服务器socket可读
        //            ReadListen(s);
        //        }
        //        else {
        //            //说明链接的客户端可读,证明有信息传上来了
        //            ReadClient(s);
        //        }
        //    }

        //    //检测是否心跳包超时的计算


        //    long timeNow = GetTimeStamp();
        //    m_TempList.Clear();

        //    foreach (ClientSocket clientSocket in m_TempList) {
        //        CloseClient(clientSocket);
        //    }
        //    m_TempList.Clear();
        //}
    }
Exemple #4
0
    private void ConnectServer()
    {
        if (m_CustomNetworkChannelHelper != null)
        {
            m_CustomNetworkChannelHelper.Shutdown();
        }
        if (m_NetworkChannel != null)
        {
            m_NetworkChannel.Close();
        }
        m_CustomNetworkChannelHelper = new ET_NetworkChannelHelper();
        m_NetworkChannel             = GameEntry.Network.CreateNetworkChannel("tcp" + m_ConnectTime++, GameFramework.Network.ServiceType.TcpWithSyncReceive, m_CustomNetworkChannelHelper);
        IPAddress iPAddress = IPAddress.Parse("192.168.31.32");

        //IPAddress iPAddress = IPAddress.Parse("129.28.170.32");
        m_NetworkChannel.Connect(iPAddress, SrvCfg.srvPort);
        //StartCoroutine(client.CheckNet());
    }
    private bool ProcessPacket(ClientSocket clientSocket)
    {
        try {
            Packet packet = ET_NetworkChannelHelper.DeserializePacket(clientSocket.ReceiveState.PacketHeader, clientSocket.ReceiveState.Stream);

            if (packet != null)
            {
                //分发消息 lsw
                CSPacketBase cSPacketBase = (CSPacketBase)packet;
                if (cSPacketBase != null)
                {
                    clientSocket.OnReciveMsg(cSPacketBase);
                }
                else
                {
                    Debug.LogError("解析失败!");
                }

                //C2R_Login r_Login = ((C2R_Login)packet);
                //Debug.LogError(r_Login.Account);
                //Debug.LogError(r_Login.Password);
                ////m_ReceivePacketPool.Fire(this, packet);
            }
            else
            {
                Debug.LogError("解析包失败");
            }

            clientSocket.ReceiveState.PrepareForPacketHeader(5 /*m_NetworkChannelHelper.PacketHeaderLength*/);
        }
        catch (Exception exception) {
            Debug.LogError(exception);

            throw;
        }

        return(true);
    }