| 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 (); | 
 | 		} | 
 | 	} | 
 | } | 
 |  |