#!/usr/bin/env python
import zmq
import TZmqServer
import storage.ttypes
import storage.Storage


class StorageHandler(storage.Storage.Iface):
    def __init__(self):
        self.value = 0

    def incr(self, amount):
        self.value += amount

    def get(self):
        return self.value


def main():
    handler = StorageHandler()
    processor = storage.Storage.Processor(handler)

    ctx = zmq.Context()
    reqrep_server = TZmqServer.TZmqServer(processor, ctx, "tcp://0.0.0.0:9090", zmq.REP)
    oneway_server = TZmqServer.TZmqServer(processor, ctx, "tcp://0.0.0.0:9091", zmq.PULL)
    multiserver = TZmqServer.TZmqMultiServer()
    multiserver.servers.append(reqrep_server)
    multiserver.servers.append(oneway_server)
    multiserver.serveForever()


if __name__ == "__main__":
    main()
