--- /dev/null
+require('thrift/protocol/tprotocol')
+require('thrift/protocol/tbinaryprotocol')
+require('thrift/transport/ttransport')
+
+class TServer
+
+ def initialize(processor, serverTransport, transportFactory=nil, protocolFactory=nil)
+ @processor = processor
+ @serverTransport = serverTransport
+ @transportFactory = transportFactory ? transportFactory : TTransportFactory.new()
+ @protocolFactory = protocolFactory ? protocolFactory : TBinaryProtocolFactory.new()
+ end
+
+ def serve(); nil; end
+
+end
+
+class TSimpleServer < TServer
+
+ def initialize(processor, serverTransport, transportFactory=nil, procotolFactory=nil)
+ super(processor, serverTransport, transportFactory, procotolFactory)
+ end
+
+ def serve()
+ @serverTransport.listen()
+ while (true)
+ client = @serverTransport.accept()
+ trans = @transportFactory.getTransport(client)
+ prot = @protocolFactory.getProtocol(trans)
+ begin
+ while (true)
+ @processor.process(prot, prot)
+ end
+ rescue TTransportException => ttx
+ print ttx,"\n"
+ end
+ trans.close()
+ end
+ end
+
+end
+
+
require 'socket'
class TSocket < TTransport
- def initialize(host, port)
+ def initialize(host='localhost', port=9090)
@host = host
@port = port
@handle = nil
end
+ def setHandle(handle)
+ @handle = handle
+ end
+
def open()
@handle = TCPSocket.new(@host, @port)
end
def isOpen()
- return @handle != nil
+ return !@handle.nil?
end
def write(str)
end
def read(sz)
- return @handle.recv(sz)
+ data = @handle.recv(sz)
+ if (data.length == 0)
+ raise TTransportException.new("TSocket: Could not read #{sz} bytes from #{@host}:#{@port}")
+ end
+ return data
end
def close()
@handle.close() unless @handle.nil?
+ @handle = nil
end
end
def accept()
if (@handle != nil)
- return @handle.accept()
+ sock = @handle.accept()
+ trans = TSocket.new()
+ trans.setHandle(sock)
+ return trans
end
return nil
end