예제 #1
0
    public void uninit()
    {
        Debug.Log("NetWork uninit");
        _endThread = true;
        while (_threadRunning)
        {
            Thread.Sleep(20);
        }

        try
        {
            _socket.Shutdown(SocketShutdown.Both);
        }
        catch (System.Exception ex)
        {
            Debug.LogException(ex);
        }

        _socket.Close();
        _socket         = null;
        _sockConnecting = false;

        _netWorkStat = NetWorkStat.None;
        //onNetWorkStatChg();

        _sendBuffer  = null;
        _sendBuffPos = 0;
        _mutexSend   = null;
        _recvBuffer  = null;
        _recvBuffPos = 0;
    }
예제 #2
0
    public void init()
    {
        if (Application.internetReachability == NetworkReachability.NotReachable)
        {
            Debug.Log("network NotReachable!");
            _netWorkStat = NetWorkStat.NotReachable;
            onNetWorkStatChg();
            return;
        }

        IPAddress ipAdress;

        if (!IPAddress.TryParse(_serverIp, out ipAdress))
        {
            Debug.Log("IPAddress parser ip failed!");
            _netWorkStat = NetWorkStat.IpAddressInvalid;
            onNetWorkStatChg();
            return;
        }

        IPEndPoint ipe;

        ipe = new IPEndPoint(ipAdress, _serverPort);

        _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        _socket.BeginConnect(ipe, connectCallback, _socket);
        _netWorkStat = NetWorkStat.Connecting;
        onNetWorkStatChg();
        return;
    }
예제 #3
0
    private void connectCallback(IAsyncResult ar)
    {
        Socket sock = (Socket)ar.AsyncState;

        Debug.Log("connectCallback");
        if (!sock.Connected)
        {
            Debug.Log("connectCallback failed");
            _netWorkStat = NetWorkStat.ConnectFailed;
            onNetWorkStatChg();
            return;
        }

        _sockConnecting = true;
        _sendBuffer     = new Byte[sendBuffLen];
        _sendBuffPos    = 0;
        _mutexSend      = new object();
        _recvBuffer     = new Byte[recvBuffLen];
        _recvBuffPos    = 0;

        _thread = new Thread(new ThreadStart(this.run));
        _thread.Start();

        _netWorkStat = NetWorkStat.Connected;
        onNetWorkStatChg();

        Debug.Log(string.Format("<color=#00FF00>{0}</color>", "socket started! succ"));
    }
예제 #4
0
    public void run()
    {
        _threadRunning = true;
        _recvBuffPos   = 0;
        _socket.BeginReceive(_recvBuffer, _recvBuffPos, recvBuffLen - _recvBuffPos, SocketFlags.None, new AsyncCallback(recieveData), this);
        Debug.Log("start run network thread");

        while (true)
        {
            if (!checkSockStat())
            {
                _netWorkStat = NetWorkStat.Disconnected;
                onNetWorkStatChg();
                break;
            }

            if (_sendBuffPos > 0)
            {
                lock (_mutexSend)
                {
                    _socket.Send(_sendBuffer, _sendBuffPos, SocketFlags.None);
                    _sendBuffPos = 0;
                }
            }

            if (_endThread)
            {
                break;
            }

            Thread.Sleep(10);
        }

        _threadRunning = false;
        Debug.Log(string.Format("<color=yellow>{0}</color>", "end sock thread"));
    }
예제 #5
0
 private void onNetWorkStatChg(NetWorkStat stat)
 {
     Debug.Log("onNetWorkStatChg: " + stat);
 }