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