Пример #1
0
        protected bool Send(byte endpoint, byte[] buffer, bool sync)
        {
            Logger.Trace("\t" + BinConvert.ToHex(endpoint) + " < " + BinConvert.ToHex(buffer));

            byte[] t = new byte[1 + buffer.Length];

            t[0] = endpoint;
            for (int i = 0; i < buffer.Length; i++)
            {
                t[1 + i] = buffer[i];
            }

            if (!clientSocket.Connected)
            {
                return(false);
            }

            bool success = false;

            try
            {
                if (sync)
                {
                    lock (sync_request)
                    {
                        CommandSyncEvent.Reset();
                        clientStream.Write(t, 0, t.Length);
                        success = CommandSyncEvent.WaitOne(CommandTimeout);
                    }
                }
                else
                {
                    clientStream.Write(t, 0, t.Length);
                    success = true;
                }
            }
            catch (Exception e)
            {
                Logger.Error("Error while sending to device: " + e.Message);
                success = false;
            }

            if (!success)
            {
                Logger.Error("Device error");
                clientSocket.Close();
                return(false);
            }

            return(true);
        }
Пример #2
0
        private void ReceiverThread()
        {
            int bytesRead = 0;

            recv_buffer = new byte[1492];

            while (clientSocket.Connected)
            {
                try
                {
                    bytesRead = clientStream.Read(recv_buffer, 0, recv_buffer.Length);
                    if (bytesRead <= 0)
                    {
                        continue;
                    }

                    if (!clientSocket.Connected)
                    {
                        break;
                    }

                    byte[] buffer = new byte[bytesRead];
                    Array.Copy(recv_buffer, buffer, buffer.Length);

                    Recv(buffer);
                }
                catch (Exception e)
                {
                    if (e is System.IO.IOException)
                    {
                        Logger.Debug("Socket has been closed");
                    }
                    else
                    {
                        Logger.Error("Error in receiver thread: " + e.Message);
                    }
                    break;
                }
            }
            CommandSyncEvent.Set();
            clientSocket = null;
            Logger.Debug("Received thread ended");
        }