Example #1
0
        public void InitNet(string ip, UInt16 ServerPort)
        {
            bClosed   = false;
            this.port = ServerPort;
            this.ip   = ip;
            m_state   = NETSTATE.DISCONNECTED;

            mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            mSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            EndPoint bindEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);

            mSocket.Bind(bindEndPoint);

            //mEndPointPool = new SafeObjectPool<IPEndPoint> (100);
            mSendPackageQueue    = new ConcurrentQueue <NetEndPointPackage> ();
            mReceivePackageQueue = new ConcurrentQueue <NetEndPointPackage> ();

            mHandleReceiveDataThread = new Thread(HandleReceiveData);
            mHandleReceiveDataThread.IsBackground = false;
            mHandleReceiveDataThread.Start();

            mReceiveThread = new Thread(ReceiveThreadUpdate);
            mReceiveThread.IsBackground = false;
            mReceiveThread.Start();

            mSendThread = new Thread(SendThreadUpdate);
            mSendThread.IsBackground = false;
            mSendThread.Start();

            mSocket.SendBufferSize    = 1024 * 1024 * 2;
            mSocket.ReceiveBufferSize = 1024 * 1024 * 2;
            DebugSystem.Log("Server ReceiveBufferSize: " + mSocket.ReceiveBufferSize);
            DebugSystem.Log("Server SendBufferSize: " + mSocket.SendBufferSize);
        }
        public void InitNet(string ip, UInt16 ServerPort)
        {
            bClosed   = false;
            this.port = ServerPort;
            this.ip   = ip;
            m_state   = NETSTATE.DISCONNECTED;
            mUdpType  = UDPTYPE.POINTTOPOINT;

            mSocket        = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            remoteEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);

            mSocket.SendBufferSize    = 1024 * 1024;
            mSocket.ReceiveBufferSize = 1024 * 1024;
            mSocket.Connect(remoteEndPoint);

            mSendPackageQueue    = new ConcurrentQueue <NetPackage> ();
            mReceivePackageQueue = new ConcurrentQueue <NetUdpFixedSizePackage> ();

            mReceiveThread = new Thread(ReceiveThreadUpdate);
            mReceiveThread.IsBackground = true;
            mReceiveThread.Start();

            mHandleDataThread = new Thread(HandleReceiveData);
            mHandleDataThread.IsBackground = true;
            mHandleDataThread.Start();

            mSendThread = new Thread(SendThreadUpdate);
            mSendThread.IsBackground = true;
            mSendThread.Start();
        }
Example #3
0
        void ConnectFail()
        {
            Log.Debug("ConnectFail");

            if (netState == NETSTATE.Connecting)
            {
                netState = NETSTATE.ConnectFailed;

                RemoveConnectTimer();

                if (--_retryTimes > 0)
                {
                    CloseTcpClient();
                    BeginRetryTimer();
                }
                else
                {
                    CloseConnect();
                    netConnectionCallback.Call(NETEVENT.RetryFail);
                }
            }
            else
            {
                Log.Debug("ConnnectFail ignore, netState = " + netState.ToString());
            }
        }
Example #4
0
        private void CloseConnect()
        {
            netState = NETSTATE.DisConnected;

            Log.Debug("Close connect");

            lock (m_BufferToSend)
            {
                m_BufferToSend.Clear();
            }

            m_HeartBeatTimeCount = 0;
            m_HelloHasResponse   = false;
            TimeoutManager.instance.ClearTimeout(m_SendHelloTimerId);
            SetTerminated();

            if (m_TcpClient == null)
            {
                return;
            }

            CloseTcpClient();

            netConnectionCallback.Call(NETEVENT.Close);
        }
Example #5
0
        private void ReceiveThreadUpdate()
        {
            while (true)
            {
                int length = 0;
                try {
                    EndPoint tempEndPoint           = new IPEndPoint(IPAddress.Broadcast, 0);
                    NetUdpFixedSizePackage mPackage = ObjectPoolManager.Instance.mUdpFixedSizePackagePool.Pop();
                    length          = mSocket.ReceiveFrom(mPackage.buffer, ref tempEndPoint);
                    mPackage.Length = length;

                    if (length > 0)
                    {
                        NetEndPointPackage mEndPointPackage = ObjectPoolManager.Instance.mNetEndPointPackagePool.Pop();
                        mEndPointPackage.mPackage        = mPackage;
                        mEndPointPackage.mRemoteEndPoint = tempEndPoint;
                        mReceivePackageQueue.Enqueue(mEndPointPackage);
                    }
                    else
                    {
                        ObjectPoolManager.Instance.mUdpFixedSizePackagePool.recycle(mPackage);

                        DebugSystem.LogError("接受长度: " + length);
                        break;
                    }
                } catch (SocketException e) {
                    if (e.SocketErrorCode == SocketError.Interrupted)
                    {
                        DebugSystem.LogWarning("阻塞Socket 调用已被取消");
                    }
                    else
                    {
                        DebugSystem.LogWarning("SocketException: " + e.SocketErrorCode);
                    }
                    break;
                } catch (Exception e) {
                    DebugSystem.LogError("服务器 异常: " + e.Message + " | " + e.StackTrace);

                    m_state = NETSTATE.DISCONNECTED;
                    peer_event mEvent = new peer_event();
                    mEvent.mNetEventType = NETEVENT.DISCONNECTED;
                    mEvent.msg           = e.Message;

                    break;
                }
            }

            DebugSystem.LogWarning("Server ReceiveThread Safe Quit !");
        }
Example #6
0
        void StartConnecting()
        {
            if (netState == NETSTATE.ConnectFailed || netState == NETSTATE.DisConnected)
            {
                netState = NETSTATE.Connecting;
                netConnectionCallback.Call(NETEVENT.Connecting);

                BeginConnectTimer();
                StartConnectThread();
            }
            else
            {
                Log.Debug("StartConnecting ignore, netState = " + netState.ToString());
            }
        }
Example #7
0
        void StartConnecting()
        {
            if (NetState == NETSTATE.ConnectFailed || NetState == NETSTATE.DisConnected)
            {
                NetState = NETSTATE.Connecting;
                if (netConnectionCallback != null)
                {
                    netConnectionCallback(NETEVENT.Connecting);
                }

                BeginConnectTimer();
                StartConnectThread();
            }
            else
            {
                FLog.Debug("StartConnecting ignore, NetState=" + NetState.ToString());
            }
        }
        private void ReceiveThreadUpdate()
        {
            while (!bClosed)
            {
                int length = 0;
                try {
                    NetUdpFixedSizePackage mReceiveStream = ObjectPoolManager.Instance.mUdpFixedSizePackagePool.Pop();
                    length = mSocket.ReceiveFrom(mReceiveStream.buffer, 0, mReceiveStream.buffer.Length, SocketFlags.None, ref remoteEndPoint);
                    if (length > 0)
                    {
                        mReceiveStream.Length = length;
                        mReceivePackageQueue.Enqueue(mReceiveStream);
                    }
                    else
                    {
                        DebugSystem.Log("Client ReceiveLength: " + length);
                        ObjectPoolManager.Instance.mUdpFixedSizePackagePool.recycle(mReceiveStream);
                    }
                } catch (SocketException e) {
                    if (e.SocketErrorCode == SocketError.Shutdown)
                    {
                        DebugSystem.LogWarning("Socket 接受操作被禁止");
                    }
                    else
                    {
                        DebugSystem.LogWarning("ScoketException: " + e.SocketErrorCode);
                    }
                    break;
                } catch (Exception e) {
                    DebugSystem.LogError(e.Message);

                    m_state = NETSTATE.DISCONNECTED;
                    peer_event mEvent = new peer_event();
                    mEvent.mNetEventType = NETEVENT.DISCONNECTED;
                    mEvent.msg           = e.Message;
                    break;
                }
            }

            DebugSystem.LogWarning("Client ReceiveThread Safe Quit !");
        }
Example #9
0
        void ConnectOK()
        {
            Log.Debug("ConnectOK");

            if (netState == NETSTATE.Connecting)
            {
                netState = NETSTATE.Connected;

                RemoveConnectTimer();
                StartSendThread();
                StartReceiveThread();

                EnableRetry(true);

                netConnectionCallback.Call(NETEVENT.Success);
            }
            else
            {
                Log.Debug("ConnectOK ignore, netState = " + netState.ToString());
            }
        }
Example #10
0
        void CloseConnect()
        {
            NetState = NETSTATE.DisConnected;
            FLog.Debug("CloseConnect");

            lock (_bufToSend)
            {
                _bufToSend.Clear();
            }

            SetTerminateFlag();

            if (_tcpClient == null)
            {
                return;
            }

            CloseTcpClient();

            if (netConnectionCallback != null)
            {
                netConnectionCallback(NETEVENT.Close);
            }
        }
Example #11
0
 public void AcceptClient(Socket mSocket, EndPoint remoteEndPoint)
 {
     this.m_state        = NETSTATE.DISCONNECTED;
     this.remoteEndPoint = remoteEndPoint;
 }