Пример #1
0
        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();
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
        }
Пример #4
0
        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("");
        }
Пример #5
0
        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("");
        }