Developing Plug-ins
This guide aims to provide help to those developing Plug-ins for RSPET. Before you start it would be good to use the program a bit (in order to have a level of familiarity with it’s execution flow) and to have a look at RSPET’s Execution Model which covers most of the needed background.
What it is
A Plug-in for RSPET is a python file and more specifically a library (meaning it is imported).
Your Checklist
Your plug-in needs to do the following :
- import the plug-in framework
from Plugins.mount import Plugin
- create a class inheriting from
Plugin
e.g.:
class Essentials(Plugin):
"""
Class expanding Plugin.
"""
__server_commands__ = {}
__cmd_help__ = {}
Going Deeper
Now in order for your plug-in to help a user it has to offer CLI commands. To do
that, in the class created above create an init function. Inside this function
create a new entry to __server_commands__
Dictionary with your command’s name
as an index and an array as a value. Said array should have the function that
executes the code as it’s first value and the state’s in which the command should
be available in as the rest. Finally, create a new entry to __cmd_help__
Dictionary with your command’s name as an index and a string containing the
command’s syntax. Let’s see how this is done with the core command help
:
class Essentials(Plugin):
"""
Class expanding Plugin.
"""
__server_commands__ = {}
__cmd_help__ = {}
def __init__(self):
"""
Declare plugin's CLI commands their syntax and their scope.
"""
self.__server_commands__["help"] = [self.help, "basic", "connected", "multiple"]
self.__cmd_help__["help"] = "help [command]"
def help(self, server, args): #Note that all functions should take those arguments.
""""List commands available in current state or provide syntax for a command."""
ret = [None,0,""]
if len(args) > 1:
ret[2] = ("Syntax : %s" % self.__cmd_help__["help"])
ret[1] = 1 #Invalid Syntax Error Code
else:
ret[2] = server.help(args)
return ret
Let’s notice a few more things on the previous example. First we see the arguments passed to help, the first one (ignoring self) is server which an instance of a Server Object. The second one is args, which is an array of the arguments the user provided to our command. The number and the validity of the arguments SHOULD be checked (for missing arguments, type miss-match etc). The second thing we notice is the functions docstring, when help displays a list of available commands to the user, it will couple your command with it’s docstring as a description. Finally, notice what the function returns. All Plug-in functions should return an array of size 3. In the first position is the state transition (in this case None), in the second position we have an integer. This represents the Return Code of the function (see ReturnCodes). Finally, the third position contains a string. This string is what will be printed on the user’s Console or API.
Server Object
In order to communicate with RSPET’s server, a plug-in has to interface with an instance of a Server Object. In order to achieve that the class exposes the following functions.
Command | Description | Arguments |
---|---|---|
select | Selects given host(s) based on ids. | ids (optional) |
get_selected | Interface function. Return selected hosts. | - |
get_hosts | Interface function. Return all hosts. | - |
execute | Execute function on all selected client objects. | cmd, args |
clean | Remove hosts taged for deletion and unselect all selected hosts. | - |
quit | Interface function. Raise a Quit signal. | - |
Host Object
Each instance of the Host Object represents a connected client. When a host is acquired (through either get_hosts or get_selected it too exposes some functions to help plug-in developers Interface with RSPET.
Command | Description | Arguments |
---|---|---|
trash | Gracefully delete host. | - |
purge | Delete host not so gracefully. | - |
send | Send message to host. | msg(string) |
recv | Receive from host. | size (int) |