|
|
|
Date Posted: |
March 29th, 2000
|
|
|
Last Updated: |
April 28th, 2008
|
|
|
License: |
BSD/MIT |
|
|
Downloads: |
19,679 total; 3 recently |
|
|
Page Views: |
126,690 total |
|
|
User Rating: |
 |
 |
|
8.88 / 10, with 105 votes |
|
Jump to the Downloads section |
|
 |
 |
About MUSCLE:
The MUSCLE system is a robust, somewhat scalable, cross-platform client-server solution for dynamic distributed applications for BeOS and other operating systems. It's distributed in source code form, and includes a ready-to-compile server, utility classes, and example clients. Tested under BeOS and Linux, but should compile and run under any POSIX compliant OS with a C++ compiler.
With MUSCLE, you can:
- Use BMessage-like PortableMessages under any operating system.
- Send flattened PortableMessages from one computer to another over TCP streams, eliminating compatibility and protocol versioning hassles.
- Run a "muscled server" on a central machine, or write/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 PortableMessages to other clients, and store PortableMessages 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, multicast, and broadcast messaging are all supported via an intelligent regular-expression based 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)
- Or just use the included message, string, dataIO, hashtable, dequeue, string-tokenizer, reference-count, regular expression parser, and object-pool classes 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.
- See the Beginner's Guide to MUSCLE (available in the archive or on the support page) for a more detailed description of the system and its capabilites.
Note: All source code in this archive is Copyright 2000 Level Control Systems. However, it is released as open source with an unrestricted license.
|
 |
|
 |
Latest Version |
 |
|
 |
| |
 |
|
Details about this version:
4.24 Released 4/28/2008
- If MUSCLE_USE_LIBRT and _POSIX_MONOTONIC_CLOCK are defined,
GetRunTime64() and Snooze64() will now use librt\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s high-resolution
functions (clock_gettime() and clock_nanosleep()) instead of
the older vanilla POSIX functions. This can provides higher
resolution timing on platforms that support librt.
- Added a new ExecuteSynchronousMessaging() virtual method
to the AbstractMessageIOGateway class, and some associated
hook/callback methods. This method lets you easily do
synchronous/RPC-style \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"function calls\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" across the gateway\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s
socket, passing in one or more Message objects as the
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"arguments\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", and receiving one or more Messages as \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"results\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\".
- MessageIOGateway now overrides ExecuteSynchronousMessaging(),
IsStillWaitingForSynchronizedReply(), and
SynchronousMessageReceivedFromGateway() so that when you
call ExecuteSynchronousMessaging() on it you will get
proper RPC function-call semantics.
- Added an IsReadyToAcceptSessions() virtual method to the
AbstractReflectSessionFactory class. Subclasses can override
this method to return false if they don\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t want to accept
any more connections for a while.
- Added an IsConnected() method to the AbstractReflectSession
class, to make it easier to check if a given session is
currently connected to anything or not.
- Added an XorDataIO class to the dataio folder.
XorDataIO XOR\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s all the data going through it, before
forwarding the method call to its held child DataIO object.
- Added a MutexGuard class that you can put on the stack
to automatically lock/unlock a Mutex via its ctor/dtor.
- Added versions of ReadZipFile() and WriteZipFile() that
take a DataIO reference instead of a file name. That way
you can read zip files over the network, through custom
filters, and so on, if you want to.
zlib/ZipFileUtilityFunctions.{cpp,h}.
- ReadZipFile() now has an optional second argument called
(loadData). Setting it false will cause ReadZipFile to
only read in the file names and uncompressed file lengths,
but not actually read or uncompress the file data. This
is useful if you just want to quickly check the zip file\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s
contents without actually unpacking everything.
- Updated testzip.cpp to accept an optional \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"namesonly\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
command line argument, which will set (loadData) to
false in its ReadZipFile() call, as described above.
- Added a GetNetworkInterfaceAddresses() function, as an
easier-to-use alternative to GetNetworkInterfaceInfos().
o Made AbstractReflectSession::IsConnectingAsync() public.
o Moved Snooze64() from NetworkUtilityFunctions.cpp to
SetupSystem.cpp, and moved its function declaration from
NetworkUtilityFunctions.h to TimeUtilityFunctions.h.
* Joel Lucsy reported a bug in FlattenToDataIO() that would cause
the last four bytes of the flattened buffer not to be written
to the DataIO object. Fixed.
* Updated zlib\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s included VC++ project files to reference zconf.h
in its new location (zlib/win32/zconf.h) so that they now work
again.
|
| |
 |
|
Intel Version - requires R5 (1.8 MB) |
24 downloads |
|
 |
|
 |
 |
| |
|
|
| Add Additional Location |
 |
| |
 |
|
PowerPC Version - requires R5 (1.8 MB) |
4 downloads |
|
 |
|
 |
 |
| |
|
|
| Add Additional Location |
 |
|
 |
|
| Source Included |
 |
 |
 |
 |
 |
| |
 |
 |
Like this app? Have questions or comments?
Why not tell the author? Use the "e-mail publisher" link to get in touch with the publisher; they usually love getting feedback.
|
|
|