private void ConnectCallback(IAsyncResult _asyncResult) { Logger.WriteDebug($"{decoderName}: connect -> callback"); //Retrieve the socket from the state object. var _socket = (Socket)_asyncResult.AsyncState; if (_socket == null) { return; } try { //Stop timeouts connectTimeout.Stop(); receiveTimeout.Stop(); sendTimeout.Stop(); //Complete the connection. _socket.EndConnect(_asyncResult); } catch (Exception ex) { Logger.WriteDebug($"{decoderName}: connect -> {ex.Message}"); } //Check Connection if (_socket == null || !_socket.Connected) { Logger.WriteDebug($"{decoderName}: connect -> fail"); //Set status decoderStatus = ConnectionStatus.Disconnected; //Raise event Disconnected.RaiseEvent(this, null); //Try to reconnect again; Reconnect(); } else { Logger.WriteDebug($"{decoderName}: connect -> ok ({_socket.RemoteEndPoint})"); //Set status decoderStatus = ConnectionStatus.Connected; //Raise event Connected.RaiseEvent(this, null); //Reset variables reconnectAttempts = 0; pingCount = 0; //Send LoginString Send(loginString); //Start receive timeout receiveTimeout.Start(); //Begin receiving the data from the remote device. var _state = new StateObject(); _state.Socket = _socket; _socket.BeginReceive(_state.Buffer, 0, StateObject.BufferSize, 0, ReceiveCallback, _state); } }
public void Start() { try { Logger.WriteDebug(MethodBase.GetCurrentMethod(), "Starting"); var stopWatch = new Stopwatch(); stopWatch.Start(); IsRunning = false; if (_decoderPort <= 0 || _decoderPort >= 65535) { Logger.WriteDebug($"{_decoderName}: Wrong setting -> decoderPort"); Disconnected.RaiseEvent(this, null); return; } //Raise event Connecting.RaiseEvent(this, null); if (TryStartListener() == false) { Logger.WriteDebug($"{_decoderName}: try to make url reservation"); NetAclChecker.AddAddress($"http://+:{_decoderPort}/"); if (TryStartListener() == false) { Logger.WriteDebug($"{_decoderName}: unable to start listener"); return; } } //Raise event Connected.RaiseEvent(this, null); IsRunning = true; stopWatch.Stop(); Logger.WriteDebug(MethodBase.GetCurrentMethod(), $"Started -> {stopWatch.Elapsed}"); } catch (Exception ex) { Logger.WriteDebug($"{_decoderName}: {ex} -> {ex.Message}"); } }
public void Connect() { _clientSocket.Connect(_hostEndPoint); Connected.RaiseEvent(this, EventArgs.Empty); SocketAsyncEventArgs readEventArgs = new SocketAsyncEventArgs(); readEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed); readEventArgs.SetBuffer(new byte[_bufferSize], 0, _bufferSize); // As soon as the client is connected, post a receive to the connection bool willRaiseEvent = _clientSocket.ReceiveAsync(readEventArgs); if (!willRaiseEvent) { ProcessReceive(readEventArgs); } }
public void Connect() { if (_disposed) { throw new ObjectDisposedException($"Can't connect because SocketClient is disposed."); } _clientSocket.Connect(_hostEndPoint); Connected.RaiseEvent(this, EventArgs.Empty); _readEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed); _readEventArgs.SetBuffer(new byte[_bufferSize], 0, _bufferSize); // As soon as the client is connected, post a receive to the connection bool willRaiseEvent = _clientSocket.ReceiveAsync(_readEventArgs); if (!willRaiseEvent) { ProcessReceive(_readEventArgs); } }
public void AcceptCallback(IAsyncResult _asyncResult) { //Get the socket that handles the client request. var _listenerSocket = (Socket)_asyncResult.AsyncState; if (_listenerSocket == null) { return; } //Get clientSocket try { decoderSocket = _listenerSocket.EndAccept(_asyncResult); //Shutdown listener only one client allowed listenerSocket.Close(); listenerSocket = null; } catch (Exception ex) { Logger.WriteDebug($"{decoderName}: {ex} -> {ex.Message}"); } //Check Connection if (decoderSocket == null || !decoderSocket.Connected) { Logger.WriteDebug($"{decoderName}: Disconnected"); decoderStatus = ConnectionStatus.ClientDisconnected; //Raise event Disconnected.RaiseEvent(this, null); //Try to reconnect again; Restart(); return; } //Start to receive try { Logger.WriteDebug($"{decoderName}: Connection from {decoderSocket.RemoteEndPoint}"); decoderStatus = ConnectionStatus.ClientConnected; restartAttempts = 0; pingAttempts = 0; //Send LoginString Send(loginString); // Begin receiving the data from the remote device. var _state = new StateObject(); decoderSocket.BeginReceive(_state.Buffer, 0, StateObject.BufferSize, 0, ReceiveCallback, _state); //Raise event Connected.RaiseEvent(this, null); } catch (Exception ex) { Logger.WriteDebug($"{decoderName}: {ex} -> {ex.Message}"); } }