protected void Loop() { while (IsAlive)// && IsServerAlive) { try { ReceiveDone.Reset(); ByteBuffer buffer = new ByteBuffer(); Socket.BeginReceive(buffer.Array, buffer.Position, buffer.Capacity, SocketFlags.None, new AsyncCallback(OnReceive), buffer); ReceiveDone.WaitOne(); } catch (Exception e) { Log.SkipLine(); Log.Error(e); Log.SkipLine(); throw; } } Dispose(); StopServer(); }
public int Read(Byte[] Data) { ReadSize = 0; SendSocketDataAvailableNotification = false; if (IsConnected && (_SocketClient.Available > 0)) { try { #if ASYNC_RECEIVE ReceiveDone.Reset(); int ByteToRead = Math.Min(Data.Length, _SocketClient.Available); _SocketClient.BeginReceive(Data, 0, ByteToRead, SocketFlags.None, new AsyncCallback(ReadCallBack), _SocketClient); ReceiveDone.WaitOne(); #else ReadSize = _SocketClient.Receive(Data); #endif } #if DEBUG_SOCKET catch (Exception e) { AccessoryLibrary.ShowException(e); ReceiveDone.Set(); ReadSize = -1; } #else catch (Exception ex) { ReceiveDone.Set(); ReadSize = -1; logger.Error(ex.ToString() + "\n"); } #endif } /* * in the calling procedure * * After calling Read() * ResetDataAvailableNotification() must be called again * to enable data notification * */ return(ReadSize); }
protected ClientHandler(Socket socket, string title = "Client", params object[] args) { Title = title; Log.Inform("Preparing {0} ...", Title.ToLower()); Socket = socket; Cryptograph = new TCryptograph(); ReceivalBuffer = new ByteBuffer() { Limit = 0 }; IsAlive = true; Prepare(args); Log.SkipLine(); Log.Success(string.Format("{0} connected from {1}.", Title, RemoteEndPoint.Address)); Log.SkipLine(); Initialize(); Register(); while (IsAlive && IsServerAlive) { ReceiveDone.Reset(); try { Socket.BeginReceive(ReceivalBuffer.Array, ReceivalBuffer.Limit, ReceivalBuffer.Capacity - ReceivalBuffer.Limit, SocketFlags.None, new AsyncCallback(OnReceive), null); } catch (Exception e) { Log.Error(e); Stop(); } ReceiveDone.WaitOne(); } Dispose(); }
public string SendMessage(string msg) { try { Helper.SendClient(_client, $"{msg}<EOF>"); SendDone.WaitOne(); State state = new State(1024, this); state.StateSocket = _client; Helper.Receive(ref state); ReceiveDone.WaitOne(); return(state.StringBuffer.ToString()); } catch (Exception e) { Console.WriteLine(e.Message); } return(""); }
public string SendMessage(string msg, TextBox consoleInput) { try { State state = new State(1024, this); state.StateSocket = _client; state.StateForm = ClientForm; consoleInput.Text = ""; AddLog(msg.Trim('\n').Trim('\r')); Helper.SendClient(state, msg); SendDone.WaitOne(); state = new State(1024, this); state.StateSocket = _client; state.StateForm = ClientForm; Helper.Receive(ref state); ReceiveDone.WaitOne(); state.StringBuffer.Clear(); if (!state.StateSocket.Connected || msg.Split(' ')[0].ToLower().Trim('\n').Trim('\r') == "bye") { AddLog("Соединение закрыто, через 2 секунды окно закроется"); Task.Factory.StartNew(async() => { await Task.Delay(2000); ClientForm.SafeClose(); }); } return(state.StringBuffer.ToString()); } catch (Exception e) { Console.WriteLine(e.Message); } return(""); }