Eng:Scratch Space

Scratch Space (by Magnie) is a "plugin server" in Python which allows you to add plugins to the server and clients can choose which plugin to use. Chat.PY (chat2) and Virtual Space (virtual_space) are examples of those. It's hosted on Sourceforge using SVN.

Some features the server allows is recoding the plugins while the server is online. No server reset is needed.

Current Bugs

 * Only the "client part" will be reloaded. Since reloading the server part of the plugin will break all the clients connected.

How the server works

 * When you first start up the server it loads the server part of the plugins listed inside the code.


 * Once someone connects they can broadcast 'plugin' to remove that plugin from the plugins in use.

How the protocol works
Messages are sent back and forth by using the Remote Sensors Protocol. The Space Protocol consists of the letters |, <, >, and :.


 * means 'echo' so you can broadcast '|test' and that will broadcast 'test' to your Scratch client.

< means 'load plugin' allowing you to use a plugin loaded on the server.

> means 'remove plugin' allowing you to switch between multiple plugins without them clashing.



The creator, Magnie, is currently working on a better 'plugin format' that makes it simpler for the server and plugin to interact and make the server more stable.

Example Plugin
# Test Plugin # This is an example plugin for the server. # What it does is ignore all messages except 'test' # and every time a client sends 'test' the count is   # increased by one. Then it sends the amount of   # tests that have been sent with a broadcast # 'You have added a test.' to the client. class Server(object): def __init__(self): self.number_of_tests = 0 # The counter def disconnect(self): pass class Plugin(object): def __init__(self, client, server): self.client = client self.server = server.plugin_servers['test'] # Set the server to the "server" of the counter def broadcast(self, message): owner = self.client if message == 'test': # Increase the counter by one. self.server.number_of_tests += 1 # Send the value of the counter to the client. owner.send_sensor( 'number of tests', str( self.server.number_of_tests ) ) # Send a broadcast that it has been updated. owner.send_broadcast( "You have added a test." ) else: print message def sensor(self, name, value): pass def disconnect(self): pass