public void Disconnect() { CtkUtil.DisposeTaskTry(this.runningTask); CtkNetUtil.DisposeTcpClientTry(this.MyTcpClient); this.OnDisconnect(new CtkNonStopTcpStateEventArgs() { Message = "Disconnect method is executed" }); }
public int ConnectTry() { try { if (!Monitor.TryEnter(this, 1000)) { return(-1); //進不去先離開 } if (!mreIsConnecting.WaitOne(10)) { return(0); //連線中就離開 } this.mreIsConnecting.Reset(); //先卡住, 不讓後面的再次進行連線 //在Lock後才判斷, 避免判斷無連線後, 另一邊卻連線好了 if (this.MyTcpClient != null && this.MyTcpClient.Connected) { return(0); //連線中直接離開 } if (this.MyTcpClient != null) { CtkNetUtil.DisposeTcpClientTry(this.MyTcpClient); this.MyTcpClient = null; } IPAddress ip = null; if (this.LocalUri != null && IPAddress.TryParse(this.LocalUri.Host, out ip)) { this.MyTcpClient = new TcpClient(new IPEndPoint(ip, this.LocalUri.Port)); } else { this.MyTcpClient = new TcpClient(); } this.MyTcpClient.NoDelay = true; this.MyTcpClient.Connect(this.RemoteUri.Host, this.RemoteUri.Port); return(0); } catch (Exception ex) { //停止連線 this.Disconnect(); throw ex; } finally { //同步作業, 最後要解除連線鎖 this.mreIsConnecting.Set(); if (Monitor.IsEntered(this)) { Monitor.Exit(this); } } }