The matt protocol describes a way to relay distreet messages between distributed network entities.
The matt protocol will be deployed in the final of the 18th annual Loebner Prize for Artifical Intelligence (Sunday October 12th).
There are three key entities in the matt protocol:
handles message storage and retrieval.
a network entity which requires the ability to send and receive messages with its peers.
handles the assignment of a
In order to start a matt session there must exist:
At least two
At least one
In order for network entities to communicate with each other:
must ensure that each registered
is assigned a
operations on their respective
protocol entity interfaces
The following outlines the operations that can be invoked on each of the entities describe above:
: returns false if there are pending unread messages, otherwise true.
: returns true if mutable operations can be performed on the
: returns the first unread message in the
: writes a message to the
: registers an
: unregisters all
: invoked by a
on each new event
: assigns a
: registers a
The following is the listing for a matt compliant api implemented using zeroc's ice:
addListener(EventListener * listener)
setMailbox(matt::messaging::Mailbox * mb);
registerParticipant(Participant * p);
I will update this page with code for a mock
In the downloads section below I have added a tar containing the matt.ice file, a sample server/client implementation in C++ and the necessary files/projects to build these on Windows, Linux and Mac OSx.
In addition to the code.tar.gz file you will need to ensure that your platform has: Boost 1.35, gcc (linux/mac) or visual studio 2003 and Ice 3.2.1.
Setting up your environment.
Ensure the required software packages are installed (Boost, Ice, compiler).
untar the files (this will create a directory called "code").
On linux or mac, cd to the code directory and type "make"
On windows, open the visual studio project under code/exmaples/vc7
Running the smaple apps... the code generates two identical binaries, differing only in name called server.tsk/client.tsk on linux/mac and server.exe/client.exe on windows.
To run the server you must type:
$ ./server.[tsk|exe] --Ice.Config="/code/examples/config/server.cfg"
To run the client you must type:
$ ./client.[tsk|exe] --Ice.Config="/code/examples/config/client.cfg"
Note on linux/mac you can also cd in to the "exmaples/cpp" directory and type:
$ make run
This will start the server and client as required.
The sample server is very basic merely echoing back to a client what has been sent to it, an echo server if you will. It is not very robust and is only intended as a tool to develope client apps.
The sample client simply checks if there are any pending messages, if there are reads them, otherwise sends "hello".
If you have any problems please contact me. I am happy to extend these smaple apps if you have any addition requirements.
Please to not reply on the implementation of the sample server - it is a sample.
interface file as specified above
documentation generated from matt.ice
interface file and Makefile which will create all bindings found on this page
Visual Basic binding
Matt Implementation Code/Examples
Matt Implementation Code/Examples without Boost dependancy
Matt Implementation Code/Examples with Java client
Matt Implementation Code/Examples with Java client and Server
Matt Implementation of client/server applicatiopns
Matt Implementation of FileRelay client/server applicatiopns
Matt Implementation of client/server applicatiopns with GUI bug fix
How do I install Ice?
What do I do with the generated files, they are completely meaningless?
You need to extend the abstract class
and implement the
You could also implement a
to have messages pushed to you, but this is optional
Can we have some comments in the code please?
Please look at the html download [or this page] for documentation.
I've got the API integrated, is there a
I can register with?
Ahh... I've not implemented one yet, I will do a Mock soon!
In the mean time you could repeat what you did
Admittedly, there's a little more code to these... but for the sake of proof of concept/mock returning a static
message or implementing an echo should be fine, no?
If you have any questions please contact Marc Allen at: email@example.com