class DeviceWithEverything(katcp.DeviceServer):
        PROTOCOL_INFO = katcp.ProtocolFlags(5, 1, [
            katcp.ProtocolFlags.MULTI_CLIENT, katcp.ProtocolFlags.MESSAGE_IDS,
            katcp.ProtocolFlags.REQUEST_TIMEOUT_HINTS
        ])

        def request_simple(self, req, msg):
            """A simple request"""

        @kattypes.return_reply()
        @kattypes.minimum_katcp_version(5, 1)
        def request_version_51(self, req, msg):
            """Request KATCP v5.1"""

        @kattypes.minimum_katcp_version(5, 0)
        def request_version_5(self, req, msg):
            """Request KATCP v5.0"""

        @kattypes.request()
        @kattypes.has_katcp_protocol_flags([
            katcp.ProtocolFlags.MULTI_CLIENT, katcp.ProtocolFlags.MESSAGE_IDS
        ])
        def request_flags(self, req):
            """Request some flags"""

        @kattypes.has_katcp_protocol_flags([katcp.ProtocolFlags.MULTI_CLIENT])
        def request_fewer_flags(self, req, msg):
            """Request with fewer flags"""

        @kattypes.request()
        @kattypes.return_reply()
        @kattypes.minimum_katcp_version(5, 1)
        @kattypes.has_katcp_protocol_flags([katcp.ProtocolFlags.MULTI_CLIENT])
        def request_version_and_flags(self, req, msg):
            """Request with version and flag requirements"""
    class DeviceTestServerV4(DeviceTestServer):
        ## Protocol versions and flags for a katcp v4 server
        PROTOCOL_INFO = katcp.ProtocolFlags(
            4, 0, set([
                katcp.ProtocolFlags.MULTI_CLIENT,
            ]))

        def __init__(self, *args, **kwargs):
            super(TestDeviceServerV4Async.DeviceTestServerV4,
                  self).__init__(*args, **kwargs)
            self.set_concurrency_options(thread_safe=False,
                                         handler_thread=False)
 class DeviceTestServer51(DeviceTestServer):
     PROTOCOL_INFO = katcp.ProtocolFlags(5, 1, [
         katcp.ProtocolFlags.MULTI_CLIENT,
         katcp.ProtocolFlags.MESSAGE_IDS,
         katcp.ProtocolFlags.REQUEST_TIMEOUT_HINTS
     ])
 class DeviceTestServerWrong(DeviceTestServer):
     ## Protocol versions and flags for a katcp v4 server
     PROTOCOL_INFO = katcp.ProtocolFlags(
         3, 0, set([
             katcp.ProtocolFlags.MULTI_CLIENT,
         ]))
 class DeviceVersionFour(self.DeviceWithEverything):
     PROTOCOL_INFO = katcp.ProtocolFlags(
         4, 0, [katcp.ProtocolFlags.MULTI_CLIENT])
 class DeviceVersionFive(self.DeviceWithEverything):
     PROTOCOL_INFO = katcp.ProtocolFlags(5, 0, [
         katcp.ProtocolFlags.MULTI_CLIENT,
         katcp.ProtocolFlags.MESSAGE_IDS
     ])
 class DeviceVersionFiveOneWithMultiClient(self.DeviceWithEverything):
     PROTOCOL_INFO = katcp.ProtocolFlags(
         5, 1, [katcp.ProtocolFlags.MULTI_CLIENT])
 class DeviceVersionFiveOneWithNothing(self.DeviceWithEverything):
     PROTOCOL_INFO = katcp.ProtocolFlags(5, 1, [])