THRIFT-812 Demo of Thrift over ZeroMQ (C#)
Patch: Nils Huegelmann 


git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1095179 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/contrib/zeromq/csharp/TZmqServer.cs b/contrib/zeromq/csharp/TZmqServer.cs
new file mode 100644
index 0000000..535c623
--- /dev/null
+++ b/contrib/zeromq/csharp/TZmqServer.cs
@@ -0,0 +1,56 @@
+using System;
+using Thrift;
+using Thrift.Server;
+using Thrift.Transport;
+using Thrift.Protocol;
+using ZMQ;
+using System.IO;
+
+using System.Collections.Generic;
+
+namespace ZmqServer
+{
+	public class TZmqServer
+	{
+		Socket _socket ;
+		TProcessor _processor;
+		
+		void debug (string msg)
+		{
+			//Uncomment to enable debug
+//			Console.WriteLine (msg);
+		}
+
+		public TZmqServer (TProcessor processor, Context ctx, String endpoint, SocketType sockType)
+		{
+			new TSimpleServer (processor,null);
+			_socket = ctx.Socket (sockType);
+			_socket.Bind (endpoint);
+			_processor = processor;
+		}
+
+		public void ServeOne ()
+		{
+			debug ("Server_ServeOne");
+			Byte[] msg = _socket.Recv ();
+			MemoryStream istream = new MemoryStream (msg);
+			MemoryStream ostream = new MemoryStream ();
+			TProtocol tProtocol = new TBinaryProtocol (new TStreamTransport (istream, ostream));
+			_processor.Process (tProtocol, tProtocol);
+
+			if (ostream.Length != 0) {
+				byte[] newBuf = new byte[ostream.Length];
+				Array.Copy (ostream.GetBuffer (), newBuf, ostream.Length);
+				debug (string.Format ("Server_ServeOne sending {0}b", ostream.Length));
+				_socket.Send (newBuf);
+			}
+		}
+
+		public void Serve ()
+		{
+			while (true)
+				ServeOne ();
+		}
+	}
+}
+