MUSCLE is a cross-platform, robust, somewhat scalable client-server messaging system for dynamic distributed applications that runs under any POSIX-compliant operating system.
MUSCLE has been developed, used, and refined as the networking component of BeShare, CueConsole, CueStation, and various other audio control applications at Level Control Systems (now Meyer Sound Laboratories) for over six years.
Here are some key features of "MUSCLE":
· Use BMessage-like muscle::Messages under any operating system.
· Send flattened muscle::Messages from one computer to another over TCP streams, eliminating unnecessary compatibility and protocol-versioning hassles.
· Run a `muscled server` on a central machine, and write (or download) client programs to log in to the server and communicate through it. Once logged in, client programs can discover who else is logged in, send muscle::Messages to other clients, and store muscle::Messages in the server`s RAM for other clients to download later. Clients can also `subscribe` to selected data on the server, and be automatically notified whenever it changes. Unicast-style, multicast-style, and broadcast-style Message routing are all supported via an intelligent hierarchical pattern-matching routing mechanism. Writing multiplayer games, IRC style chat applications, SETI style distributed calculation apps, or any other type of distributed software is made easy because MUSCLE handles all the dirty work for you!
· Customize the included `muscled server` by defining your own session logic or message-streaming protocol. (Note that this is only necessary for certain specialized applications--the standard server provides sufficient functionality for most things)
· Write your client code in C , C, Java, Delphi, or Python. Single-threaded and multi-threaded messaging APIs are provided for all of the aforementioned languages.
· Or just use the included message, string, dataIO, hashtable, dequeue, string-tokenizer, reference-count, regular expression and pattern matching parser, and object-pool code by themselves, as handy cross-platform utility classes. All source code is included, and you are free to use and abuse it any way you wish.
What`s New in This Release: [ read full changelog ]
· Added a GetDefaultObjectForType() templated function to MuscleSupport.h. This function returns a reference to a default-constructed static object of the specified type.
· Added a description of the Hashtable class`s feature set to the Hashtable DOxygen documentation.
· Added a const  operator to the Hashtable class. The  operator behaves the same as the GetWithDefault() method.
· Expanded and enhanced the DOxygen per-class documentation of various classes.
· Reduced sizeof(Queue), sizeof(Hashtable), and sizeof(ObjectPool) by removing their default-object member items and adding calls to GetDefaultObjectForType() instead.
· Replaced the various get-default-object convenience methods (GetEmptyString(), GetEmptyMessage(), etc) with inline call-throughs to GetDefaultObjectForType().