示例#1
0
        // Public
        public void Connect(string hostname, int port)
        {
            if (mxState == NFNetState.Connected)
            {
                return;
            }

            mxState = NFNetState.Connecting;

            mxMessages.Clear();
            mxEvents.Clear();

            mxClient = new TcpClient();

            mxClient.BeginConnect(hostname,
                                  port,
                                  new AsyncCallback(ConnectCallback),
                                  mxClient);
        }
示例#2
0
        private void ReadData()
        {
            bool endOfStream = false;

            while (!endOfStream)
            {
                int    bytesRead = 0;
                byte[] bytes     = new byte[bufferSize];
                try
                {
                    bytesRead = mxStream.Read(bytes, 0, bufferSize);
                }
                catch (Exception e)
                {
                    e.ToString();
                }

                if (bytesRead == 0)
                {
                    endOfStream = true;
                }
                else
                {
                    lock (mxEvents)
                    {
                        mxEvents.Enqueue(NFNetEventType.DataReceived);
                    }
                    lock (mxPackets)
                    {
                        mxPackets.Enqueue(new NFSocketPacket(bytes, bytesRead));
                    }
                }
            }

            mxState = NFNetState.Disconnected;

            mxClient.Close();
            lock (mxEvents)
            {
                mxEvents.Enqueue(NFNetEventType.Disconnected);
            }
        }
示例#3
0
        // Public
        public void Connect(string hostname, int port)
        {
            if (mxState == NFNetState.Connected)
            {
                return;
            }

            NFLog.Instance.Log(NFLog.LOG_LEVEL.DEBUG, "Start connect to: " + hostname + " " + port);

            mxState = NFNetState.Connecting;

            mxMessages.Clear();
            mxEvents.Clear();

            mxClient = new TcpClient();

            mxClient.BeginConnect(hostname,
                                  port,
                                  new AsyncCallback(ConnectCallback),
                                  mxClient);
        }
示例#4
0
        private void SetTcpClient(TcpClient tcpClient)
        {
            mxClient = tcpClient;

            if (mxClient.Connected)
            {
                mxStream = mxClient.GetStream();
                mxReader = new StreamReader(mxStream);
                mxWriter = new StreamWriter(mxStream);

                mxState = NFNetState.Connected;

                mxEvents.Enqueue(NFNetEventType.Connected);

                mxReadThread = new Thread(ReadData);
                mxReadThread.IsBackground = true;
                mxReadThread.Start();
            }
            else
            {
                mxState = NFNetState.Disconnected;
            }
        }
示例#5
0
        public void Disconnect()
        {
            mxState = NFNetState.Disconnected;

            try { if (mxReader != null)
                  {
                      mxReader.Close();
                  }
            }
            catch (Exception e) { e.ToString(); }
            try { if (mxWriter != null)
                  {
                      mxWriter.Close();
                  }
            }
            catch (Exception e) { e.ToString(); }
            try { if (mxClient != null)
                  {
                      mxClient.Close();
                  }
            }
            catch (Exception e) { e.ToString(); }
        }