Here is a description of the application. There are two different modules on this project, The Client and the Server. The communication between server and client are based on the HTTP protocol and it makes use of XML.

The Server

The server is implemented as a WinAmp plugin. It's a general winamp plugin which means that it can control winamp completely.
The server is started with winamp automatically, you will just have to start the client.

We're planning to seperate the winamp-plugin from the server form. We want to do this, because it will decrease the memory-requirements for the server when it's running. We're not sure how much benefit we will have with that, so it's somthing to try out.

We also want the server to be multi-threaded. The problem is that we don't know how to implement this. We want to find information on that, so

The Client

The client is a program written in Delphi 5. We are trying to make it skinnable, just like WinAmp. However, the first releases won't be, because we're now focussing on a working version. The client depends on several external units. The most needed one is HttpProt.pas from F.Piette. Besides that we make heavy use of RxLib 2.75.

The client application itself consists of several units. Most notably is CliRequest.pas. This unit is used to run the requests. You can add a listener for tags, so that if a tag is found in the stream, your defined procedure will be run. You can also add Datalisteners, so the text between an open and a close tag can be found and used in your program.

Communication

The server is NOT able to send data to any client on its own, because the connection isn't persistent. A client connects through
http://my-host:3498/winamp?do='{action}'&what='{what}'&to='{to}'.

'{action}': the string that tells gen_AmpServer what action to perform.
'{what}': the string that tells gen_AmpServer what to do with the given action.
'{to}': the string that tells gen_AmpServer where to go and is optional

An example:
http://localhost:3498/winamp?do=get&what=playlist, will get the current playlist from the server.

The reply form the server will be an XML document. We define different tags for use with the document. We haven't specified all of them yet, but already defined are: