At the center of the Smarthome2 system is the brain. This is a C++ CORBA server with an embedded SWI Prolog engine. The C++ code implements three CORBA interfaces: x10react, x10send, and agentreact, and when a notification call is made to any of these interfaces, the C++ code spawns a thread to handle the notification and then returns immediatly. The thread then requests a mutex and then calls the Prolog predicate that handles the notification and decides on any action to take.
The newest part of the system is the conversational interface. What can it do? Client access to this interface is provided by a new chat dialog included in the smarthome server and is modeled to look like a typical instant messaging system, but instead of chatting with another user, you chat with smarthome. I also have a web based chat interface for access from the Internet. I can also send email to the system which upon authentication is passed to the conversational interface, processed and a return email sent with the responses.
The brain is multithreaded and has execution queues.