private void ThreadCheckSocket() { Thread.CurrentThread.Priority = ThreadPriority.Normal; CountStateTest = 0; Random RandomWait = new Random(); IsThreadRunning = true; while ((_SocketClient != null) && _SocketClient.Connected) { if (SendSocketDataAvailableNotification && (_SocketClient.Available > 0)) { #if FIRE_EVENT_BY_BEGININVOKE if (OnDataAvailable != null) { OnDataAvailable.BeginInvoke(this, new SocketPortDataEventArgs(new SocketPortData(SocketMessageType.SocketDataAvailable, this)), null, null); } #else if (OnDataAvailable != null) { OnDataAvailable(this, new SocketPortDataEventArgs(new SocketPortData(SocketMessageType.SocketDataAvailable, this))); } #endif } Thread.Sleep(RandomWait.Next(10)); if (CountStateTest > SocketBreakUpCount) { break; } } if ((_SocketClient != null) && _SocketClient.Connected) { _SocketClient.Close(); } _SocketClient = null; #if FIRE_EVENT_BY_BEGININVOKE if (OnEventMessage != null) { OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.Disconnected), null, null); } #else if (OnEventMessage != null) { OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.Disconnected)); } #endif IsThreadRunning = false; }
public void Disconnect() { // Socket.DisconnectAsync() is new in .NET 2.0 SP1 // not available in original .NET 2.0 SendSocketDataAvailableNotification = false; if (IsConnected) { try { DisconnectDone.Reset(); SocketClient.BeginDisconnect(false, new AsyncCallback(DisconnectCallBack), SocketClient); DisconnectDone.WaitOne(); SocketClient = null; //if (OnEventMessage != null) { OnEventMessage(this, new EventSocketPortMessage(SocketPortMessageType.Disconnected)); } #if FIRE_EVENT_BY_BEGININVOKE if (OnEventMessage != null) { OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.Disconnected), null, null); } #else if (OnEventMessage != null) { OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.Disconnected)); } #endif } #if DEBUG_SOCKET catch (Exception e) { AccessoryLibrary.ShowException(e); DisconnectDone.Set(); } #else catch (Exception ex) { DisconnectDone.Set(); logger.Error(ex.ToString() + "\n"); } #endif } }
public void Connect() { IPAddress IP = null; IPAddress.TryParse(RemoteIpAddress, out IP); SendSocketDataAvailableNotification = false; if (IP == null) { try { IPAddress[] IPS = Dns.GetHostAddresses(RemoteIpAddress); if ((IPS != null) && (IPS.Length > 0)) { IP = IPS[0]; } } #if DEBUG_SOCKET catch (Exception e) { AccessoryLibrary.ShowException(e); } #else catch (Exception ex) { logger.Error(ex.ToString() + "\n"); } #endif } if (IP != null) { SocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); SocketClient.Blocking = false; try { #if FIRE_EVENT_BY_BEGININVOKE if (OnEventMessage != null) { OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.Connecting), null, null); } #else if (OnEventMessage != null) { OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.Connecting)); } #endif SocketClient.ReceiveBufferSize = ClientSocketControl.ReceiveBufferSize; ConnectDone.Reset(); SocketClient.BeginConnect(new IPEndPoint(IP, IpPortNumber), new AsyncCallback(ConnectCallBack), SocketClient); ConnectDone.WaitOne(); if (IsConnected) { BeginSocketThread(); SendSocketDataAvailableNotification = true; #if FIRE_EVENT_BY_BEGININVOKE if (OnEventMessage != null) { OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.Connected), null, null); } #else if (OnEventMessage != null) { OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.Connected)); } #endif } else { SocketClient.Close(); SocketClient = null; #if FIRE_EVENT_BY_BEGININVOKE if (OnEventMessage != null) { OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed), null, null); } #else if (OnEventMessage != null) { OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed)); } #endif } } catch (Exception ex) { ConnectDone.Set(); SocketClient.Close(); SocketClient = null; logger.Error(ex.ToString() + "\n"); #if FIRE_EVENT_BY_BEGININVOKE if (OnEventMessage != null) { OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed), null, null); } #else if (OnEventMessage != null) { OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed)); } #endif } } else { #if FIRE_EVENT_BY_BEGININVOKE if (OnEventMessage != null) { OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed), null, null); } #else if (OnEventMessage != null) { OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed)); } #endif } }