
Introduction
====================================






Protocol
===================================
The protocol used is heavily inspired by the Majodomo protocol (insert link). But modified for this use case.

All messages are prepended by the ZMQ socket with an address (sender).

Servers
----------------------------------
Reply to Request

+-------+------------+-----------------------------------------------------------+
| Frame | Msg        | Meaning                                                   |
+=======+============+===========================================================+
| 1     | ""         | Empty delimiter                                           |
+-------+------------+-----------------------------------------------------------+
| 2     | "S"        | SenderType [S]erver                                       |
+-------+------------+-----------------------------------------------------------+
| 3     | "3"        | Command (REPLY)                                           |
+-------+------------+-----------------------------------------------------------+
| 4     | "ServerA"  | Name of Server                                            |
+-------+------------+-----------------------------------------------------------+
| 5     | "12131231" | Client addresse (socket address)                          |
+-------+------------+-----------------------------------------------------------+
| 6     | "2"        | Answer from the server, result of method called on server |
+-------+------------+-----------------------------------------------------------+

On Startup

+-------+-------------------------+-----------------------------------------+
| Frame | Msg                     | Meaning                                 |
+=======+=========================+=========================================+
| 1     | ""                      | Empty delimiter                         |
+-------+-------------------------+-----------------------------------------+
| 2     | "S"                     | SenderType [S]erver                     |
+-------+-------------------------+-----------------------------------------+
| 3     | "1"                     | Command (Start Up)                      |
+-------+-------------------------+-----------------------------------------+
| 4     | "QWS02"                 | Protocol version (version control)      |
+-------+-------------------------+-----------------------------------------+
| 5     | "ServerA"               | Name of Server                          |
+-------+-------------------------+-----------------------------------------+
| 6     | "[get_number,do_stuff]" | List of methods available on the server |
+-------+-------------------------+-----------------------------------------+

On Disconnect

+-------+-----------+------------------------------------+
| Frame | Msg       | Meaning                            |
+=======+===========+====================================+
| 1     | ""        | Empty delimiter                    |
+-------+-----------+------------------------------------+
| 2     | "C"       | SenderType [C]lient                |
+-------+-----------+------------------------------------+
| 3     | "5"       | Command (Disconnect)               |
+-------+-----------+------------------------------------+

Client
------------------------------
Request to server

+-------+-----------------+----------------------------------------+
| Frame | Msg             | Meaning                                |
+=======+=================+========================================+
| 1     | ""              | Empty delimiter                        |
+-------+-----------------+----------------------------------------+
| 2     | "C"             | SenderType [C]lient                    |
+-------+-----------------+----------------------------------------+
| 3     | "2"             | Command (Request)                      |
+-------+-----------------+----------------------------------------+
| 4     | "ServerA"       | Name of server request should go to    |
+-------+-----------------+----------------------------------------+
| 5     | "get_number"    | Name of method to call on that server  |
+-------+-----------------+----------------------------------------+
| 6     | "[args,kwargs]" | Args and kwargs to pass to that method |
+-------+-----------------+----------------------------------------+

On Startup

+-------+-----------+------------------------------------+
| Frame | Msg       | Meaning                            |
+=======+===========+====================================+
| 1     | ""        | Empty delimiter                    |
+-------+-----------+------------------------------------+
| 2     | "C"       | SenderType [C]lient                |
+-------+-----------+------------------------------------+
| 3     | "1"       | Command (Start Up)                 |
+-------+-----------+------------------------------------+
| 4     | "QWPC02"  | Protocol version (version control) |
+-------+-----------+------------------------------------+
| 5     | "Client1" | Name of client                     |
+-------+-----------+------------------------------------+

On Disconnect

+-------+-----------+------------------------------------+
| Frame | Msg       | Meaning                            |
+=======+===========+====================================+
| 1     | ""        | Empty delimiter                    |
+-------+-----------+------------------------------------+
| 2     | "C"       | SenderType [C]lient                |
+-------+-----------+------------------------------------+
| 3     | "4"       | Command (Disconnect)               |
+-------+-----------+------------------------------------+