Kamaelia docs : Kamaelia.Chassis.ConnectedServer

Simple Server Chassis

A simple TCP server, bound to a specified port. For each client that connects, a protocol handler component, of your choosing, is created to send and receive data to and from that client.

Example Usage

A server using a simple echo protocol, that just echoes back anything sent by the client:

class EchoProtocol(Axon.Component.component):

    def main(self):
        while not self.shutdown():
            yield 1
            if self.dataReady("inbox"):
                data = self.recv("inbox")
                self.send(data, "outbox")

    def shutdown(self):
        if self.dataReady("control"):
            msg = self.recv("control")
            return isinstance(msg, Axon.Ipc.producerFinished):

def newProtocol():
    return EchoProtocol()

simpleServer = SimpleServer( protocol = newProtocol, port = PORTNUMBER )
simpleServer.activate()

Why is this useful?

Provides a framework for creating generic protocol handlers to deal with information coming in on a single port (and a single port only). This however covers a large array of server types.

A protocol handler is simply a component that can receive and send data (as byte strings) in a particular format and with a particular behaviour - ie. conforming to a particular protocol.

Provide this chassis with a factory function to create a component to handle the protocol. Whenever a client connects a handler component will then be created to handle communications with that client.

How does it work?

At initialisation the component registers a TCPServer component to listen for new connections on the specified port.

You supply a factory function that takes no arguments and returns a new protocol handler component.

When it receives a 'newCSA' message from the TCPServer (via the "_socketactivity" inbox), the factory function is called to create a new protocol handler. The protocol handler's "inbox" inbox and "outbox" outbox are wired to the ConnectedSocketAdapter (CSA) component handling that socket connection, so it can receive and send data.

If SingleServer receives a 'shutdownCSA' message (via "_socketactivity") then a Kamaelia.KamaeliaIpc.socketShutdown message is sent to the protocol handler's "control" inbox, and both it and the CSA are unwired.

This component does not terminate. It ignores any messages sent to its "control" inbox.

In practice, this component provides no external connectors for your use.

History

This code is based on the code used for testing the Internet Connection abstraction layer.

To do

This component currently lacks an inbox and corresponding code to allow it to be shut down (in a controlled fashion). Needs a "control" inbox that responds to shutdownMicroprocess messages.


Kamaelia.Chassis.ConnectedServer.ServerCore

class ServerCore(Axon.AdaptiveCommsComponent.AdaptiveCommsComponent)

ServerCore(protocol[,port]) -> new Simple protocol server component

A simple single port, multiple connection server, that instantiates a protocol handler component to handle each connection.

Keyword arguments:

  • protocol -- function that returns a protocol handler component
  • port -- Port number to listen on for connections (default=1601)

Inboxes

  • control : We expect to get serverShutdown messages here
  • _socketactivity : Messages about new and closing connections here

Outboxes

  • _serversignal : we send shutdown messages to the TCP server here

Methods defined here

__init__(self, **argd)

x.__init__(...) initializes x; see x.__class__.__doc__ for signature

handleClosedCSA(self, shutdownCSAMessage)

handleClosedCSA(shutdownCSAMessage) -> None

Terminates and unwires the protocol handler for the closing socket.

Keyword arguments: shutdownCSAMessage -- shutdownCSAMessage.object is the ConnectedSocketAdapter for socket that is closing.

handleNewConnection(self, newCSAMessage)

handleNewConnection(newCSAMessage) -> Axon.Ipc.newComponent(protocol handler)

Creates and returns a protocol handler for new connection.

Keyword arguments:

  • newCSAMessage -- newCSAMessage.object is the ConnectedSocketAdapter component for the connection

Kamaelia.Chassis.ConnectedServer.SimpleServer

class SimpleServer(ServerCore)

Methods inherited from Kamaelia.Chassis.ConnectedServer.MoreComplexServer :

Feedback

Got a problem with the documentation? Something unclear that could be clearer? Want to help improve it? Constructive criticism is very welcome - especially if you can suggest a better rewording!

Please leave you feedback here in reply to the documentation thread in the Kamaelia blog.

-- Automatic documentation generator, 19 Oct 2008 at 14:29:09 UTC/GMT

This is a page from the Kamaelia website. You can find the original here: