[ros-diffs] [arty] 35222: Sorry, forgotten file from Gregor Schnieder's patch.

arty at svn.reactos.org arty at svn.reactos.org
Sat Aug 9 14:33:03 CEST 2008


Author: arty
Date: Sat Aug  9 07:33:02 2008
New Revision: 35222

URL: http://svn.reactos.org/svn/reactos?rev=35222&view=rev
Log:
Sorry, forgotten file from Gregor Schnieder's patch.

Added:
    trunk/tools/reactosdbg/Pipe/serialpipe.cs
Modified:
    trunk/tools/reactosdbg/Pipe/socketpipe.cs

Added: trunk/tools/reactosdbg/Pipe/serialpipe.cs
URL: http://svn.reactos.org/svn/reactos/trunk/tools/reactosdbg/Pipe/serialpipe.cs?rev=35222&view=auto
==============================================================================
--- trunk/tools/reactosdbg/Pipe/serialpipe.cs (added)
+++ trunk/tools/reactosdbg/Pipe/serialpipe.cs [iso-8859-1] Sat Aug  9 07:33:02 2008
@@ -1,0 +1,88 @@
+using System;
+using System.Text;
+using System.IO.Ports;
+
+namespace AbstractPipe
+{
+    public class SerialPipe : Pipe
+    {
+        SerialPort mSerialPort;
+        int mBufSize;
+
+        public event PipeReceiveEventHandler PipeReceiveEvent;
+        public event PipeErrorEventHandler PipeErrorEvent;
+
+        public SerialPipe(SerialPort port)
+        {
+            mSerialPort = port;
+            mBufSize = mSerialPort.WriteBufferSize;
+            //try to get older input once without timeout (to avoid blocking behaviour)
+            mSerialPort.ReadTimeout = 10;
+            try
+            {
+                String buf = mSerialPort.ReadLine();
+                if (buf.Length > 0 && PipeReceiveEvent != null)
+                    PipeReceiveEvent.Invoke(this, new PipeReceiveEventArgs(buf));
+            }
+            catch (TimeoutException) { }
+            catch (Exception e)
+            {
+                if (PipeErrorEvent != null)
+                    PipeErrorEvent.Invoke(this, new PipeErrorEventArgs(e.Message));
+            }
+            mSerialPort.ReadTimeout = -1;
+            //set up internal handlers
+            mSerialPort.DataReceived += SerialPortDataReceived;
+            mSerialPort.ErrorReceived += SerialPortErrorReceived;
+        }
+        
+        public bool Write(string output)
+        {
+            lock (this)
+            {
+                if (mSerialPort == null) return false;
+                try
+                {
+                    byte[] outbuf = UTF8Encoding.UTF8.GetBytes(output);
+                    int off = 0, len;
+                    //supply the output according to the buffer size, might not be needed
+                    do
+                    {
+                        if (output.Length - off > mBufSize)
+                        {
+                            len = mBufSize;
+                        }
+                        else
+                        {
+                            len = output.Length - off;
+                        }
+                        mSerialPort.Write(outbuf, off, len);
+                        off += len;
+                    }
+                    while (off < outbuf.Length);
+                    return off == outbuf.Length;
+                }
+                catch (Exception e)
+                {
+                    mSerialPort.Close();
+                    if (PipeErrorEvent != null)
+                        PipeErrorEvent.Invoke(this, new PipeErrorEventArgs(e.Message));
+                    return false;
+                }
+            }
+        }
+
+        public void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs args)
+        {
+            if (PipeReceiveEvent != null)
+                PipeReceiveEvent.Invoke(this, new PipeReceiveEventArgs(mSerialPort.ReadExisting()));
+        }
+
+        public void SerialPortErrorReceived(object sender, SerialErrorReceivedEventArgs args)
+        {
+            mSerialPort.Close();
+            if (PipeErrorEvent != null)
+                PipeErrorEvent.Invoke(this, new PipeErrorEventArgs(args.EventType.ToString()));
+        }
+    }
+}

Modified: trunk/tools/reactosdbg/Pipe/socketpipe.cs
URL: http://svn.reactos.org/svn/reactos/trunk/tools/reactosdbg/Pipe/socketpipe.cs?rev=35222&r1=35221&r2=35222&view=diff
==============================================================================
--- trunk/tools/reactosdbg/Pipe/socketpipe.cs [iso-8859-1] (original)
+++ trunk/tools/reactosdbg/Pipe/socketpipe.cs [iso-8859-1] Sat Aug  9 07:33:02 2008
@@ -15,28 +15,31 @@
 
         public bool Write(string output)
         {
-            if (mSocket == null) return false;
-            try
+            lock (this)
             {
-                byte[] outbuf = UTF8Encoding.UTF8.GetBytes(output);
-                int off = 0, res;
-                do
+                if (mSocket == null) return false;
+                try
                 {
-                    res = mSocket.Send(outbuf, off, outbuf.Length - off, SocketFlags.None);
-                    if (res > 0)
-                        off += res;
+                    byte[] outbuf = UTF8Encoding.UTF8.GetBytes(output);
+                    int off = 0, res;
+                    do
+                    {
+                        res = mSocket.Send(outbuf, off, outbuf.Length - off, SocketFlags.None);
+                        if (res > 0)
+                            off += res;
+                    }
+                    while (off < outbuf.Length && res != -1);
+                    return off == outbuf.Length;
                 }
-                while (off < outbuf.Length && res != -1);
-                return off == outbuf.Length;
+                catch (System.Net.Sockets.SocketException se)
+                {
+                    mSocket.Close();
+                    if (PipeErrorEvent != null)
+                        PipeErrorEvent.Invoke(this, new PipeErrorEventArgs(se.Message));
+                    return false;
+                }
+                catch (Exception) { return false; }
             }
-            catch (System.Net.Sockets.SocketException se)
-            {
-                mSocket.Close();
-                if (PipeErrorEvent != null)
-                    PipeErrorEvent.Invoke(this, new PipeErrorEventArgs(se.Message));
-                return false;
-            }
-            catch (Exception) { return false; }
         }
 
         public void TriggerReadable(IAsyncResult result)



More information about the Ros-diffs mailing list