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; }
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; }
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")); }
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")); }
private void onNetWorkStatChg(NetWorkStat stat) { Debug.Log("onNetWorkStatChg: " + stat); }