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.
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()
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.
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.
This code is based on the code used for testing the Internet Connection abstraction layer.
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.
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:
x.__init__(...) initializes x; see x.__class__.__doc__ for signature
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(newCSAMessage) -> Axon.Ipc.newComponent(protocol handler)
Creates and returns a protocol handler for new connection.
Keyword arguments:
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