----------------------------------------------------------------
						  AMARQUEE v54.0
					(Released May 4th 2002)
----------------------------------------------------------------
The Problem: 
 You have a great idea for a killer multi-player Internet game 
 or multi-user net app, but it's a total pain in the @)#$* to 
 write all the TCP connection and data synchronization code 
 you'll need to get it going.  So you put your idea on the 
 back-burner and go play "Lemmings" instead.  And thus the 
 Amiga is deprived of a fun Internet app.  D-oh!  :(
 
The Solution:  (well, okay, it's *a* solution, anyway)
 AMarquee is a system that handles all of the icky information 
 distribution details for you, allowing you to concentrate on 
 coding your application, rather than on which data goes into 
 which socket when.  AMarquee consists of a shared library and
 a TCP daemon, which work together to get your data where it
 needs to be.  Your program calls simple amarquee.library
 functions to broadcast your data, and waits on a provided
 MsgPort for data from other hosts.  Easy!
 Version 49+ of amarquee.library may be used in more serious network
 applications too, that cannot use the amarquee protocol, like FTP and HTTP
 clients. This in the same easy fashioned way!
Features of amarquee.library (the shared library/API):
 - Programs written to use amarquee.library will work transparently
   with Inet225, AmiTCP, Miami, or any other TCP stack that is 
   "AmiTCP compatible".
 - Has a simple API that requires no knowledge of multithreading 
   techniques or socket programming to use.
 - Each AMarquee connection you make automatically and transparently
   starts a separate background execution thread, so your app will 
   never have to block while data is sent or received.
 - An arbitrary number of AMarquee connections may be active at once.
 - Allows you to "subscribe" to data that interests you, so that
   when the data on the server is changed you will be automatically 
   notified.  You never need to poll for anything!
 - An easy mechanism for sending messages to one or many other
   AMarquee clients that are logged into the same server.
 - Standard Amiga wildcarding is supported in all applicable functions.
   This allows you to easily and succinctly refer to one host or data
   item, or many, as appropriate.
 - #includes for C, C++, and PCQ Pascal are included.
 - ARexx accessible.  That is, ARexx scripts can use amarquee.library
   through rexxamarquee.library for communications using the same API
   that compiled C programs do.
 - Example programs in C, C++, Pascal, and ARexx are included.
 - Operation is almost totally asynchronous for efficiency, but
   several easy synchronization methods are available if you need them.
 - Can also be used for direct client-to-client connections and
   for making inetd-launched or manually-launched daemon programs.
 - Automatically detects when the computer on the other end of
   the AMarquee connection has crashed or been shut down, even 
   on idle connections.
 - In addition it can connect to any TCP service, eg. HTTP and FTP, and it will
   work in the same easy fashion like any other AMarquee connection.
Features of AMarqueed (the AmiTCP server):
 - Works with Inet225, AmiTCP, Miami, or any other TCP stack 
   that is "AmiTCP compatible".
 - Fully multithreaded design, with one server process per connection.
 - Re-entrant code, to minimize memory usage.
 - Data is stored in a filesystem-like tree structure for simplicity,
   flexibility and efficiency.  Each client gets its own "home directory"
   that it may write to or read from, and each client may also
   read from the "home directories" of other clients.
 - Efficient design minimizes CPU usage, net bandwidth, and execution time.
 - Limits may be put on memory usage, number of connections, and/or 
   which clients or apps may connect.  Only serve the hosts and apps
   you want to serve!
 - Supports data streaming to one or many clients at once.
 - Data streaming and synchronization features let you be sure your 
   data was read by all interested hosts before you update it again.
 - Automatically detects and eliminates "dead" connections (e.g.
   if the client computer was shut down without quitting politely)
 - Server may be administered remotely by clients with "privileged"
   status.
WHAT'S NEW IN VERSION 54.0:
( "-" = new feature, "*" = bug fix)
V54.0: (Public release 2002-May-04) (amarquee.library v54.0, rexxamarquee.library v54.0, AMarqueed v51.0)
*    QGetLocalIP() did not return the local ip address when the session was created with
	 QNewSocketServerSession().
*    When a session created with QNewHostSession is connected it shall return the ip address
	 of the remote host in the qm_Data field of the QMessage, it did return the local ip address
	 with version 53 of amarquee.library. So if your program doesn't work with v.53 you know why.
*    The version string of rexxamarquee.library wasn't updated since v 52.
V53.0: (Public release 2002-Apr-24) (amarquee.library v53.0, rexxamarquee.library v53.0, AMarqueed v51.0)
-    New function STRPTR QGetLocalIP(struct QSession *)
	 It returns the local ip address of the interface that is connected to the session.
	 Valid as soon as the session is connected.
*    The documentation for QNewSessionAsync() said that your hostname would be
	 returned in the qm_Path when your are connected to the server. That's not true.
	 It will be /serverhostname/yourprogname
*    The datatype for argument two and three for the function QSetKeyAccessOp was wrong in the AMarquee_protos.h.
-    Added QGetHostName, QGetProgName and QGetLocalIP to the rexxamarquee.library.
V52.2: () (amarquee.library v52.0, rexxamarquee.library v52.0, AMarqueed v51.0)
-    The include files were modified. Added support for more compilers in the pragma, clib
	 and proto files. Just copy over all of them to your include directories.
V52.1: () (amarquee.library v52.0, rexxamarquee.library v52.0, AMarqueed v51.0)
-    Added a unit for the FPC Pascal Compiler, and an example named AMarqueeTest.pas.
	 The AMarquee.i file for PCQ Pascal was also updated with varargs functions for the
	 new Tag-functions. The PCQ example named PascalTest.p was also updated to use a Tag-
	 function.
	 All those files were kindly given to me by Nils Sjöholm, author of the PCQ and the
	 Amiga port of FPC.
V52.0: (Public release 12-Aug-2000) (amarquee.library v52.0, rexxamarquee.library v52.0, AMarqueed v51.0)
*    This bug should have been fixed in v.51 but apperently wasn't :(
	 The QNew*Session() and QFreeSession() functions cleared the shared message port given
	 with the tag QSESSION_SHAREDMSGPORT.
	 Because of this misfunction there were problems when you created a new or freed an old
	 session while there were messages waiting in the message port. You should require at
	 least v.52 of amarquee.library when you use shared message ports.
	 Please understand that only one task, the one which created the shared message port, may
	 create and free sessions which are bound to the shared message port.
	 For any sessions please also understand that you must make sure that only one task at
	 one time use a specific session. This apply to all the Q*Op() functions, which could be
	 called from several tasks if the calls are serialized.
	 QFreeSession() may only be called from the task which owns the session, i.e. the task
	 which created the session or have taken over a session with QReattachSession().
  |