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