<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to server-connection</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>Recent changes to server-connection</description><atom:link href="https://sourceforge.net/p/floctrl/wiki/server-connection/feed" rel="self"/><language>en</language><lastBuildDate>Tue, 03 Apr 2012 14:25:57 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/floctrl/wiki/server-connection/feed" rel="self" type="application/rss+xml"/><item><title>WikiPage server-connection modified by Afnan Fahim</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>&lt;pre&gt;--- v17 
+++ v18 
@@ -34,83 +34,85 @@
 
 If there is no supernode, you should wait for the supernode to connect to you.
 
-
-
-
+##Java Implementation##
+An implementation has been completed in Python and hosted on Google's App Engine. The functionality is exactly the same as that of the Python implementation, and the workings of the GET requests on which the implementation is based are presented in the Python implementation below. The implementation is accessable at http://laptop-orchestra.appspot.com/*.
+
 ##Python Implementation##
 An implementation has been completed in Python.  Functionality is provided via GET requests.  It is available at [http://www.music.cs.cmu.edu/cgi-bin/](http://www.music.cs.cmu.edu/cgi-bin/)\*.  Files marked with an asterisk are password-protected.  If you look at the code it should be pretty easy to tell how to get pass the password.  The functionality and required parameters are as follows:
 
 ####admin(\*)####
 * Arguments: (none)
 * Web interface for controlling server.  Should not be used for any other purpose; hook into other files.
 
 ####conductor####
 * Arguments: (none)
 * If the IP of the requester belongs to a registered user, returns information about the conductor and the conductor's supernode.
 * If the requester is not registered, returns an error.
 
 ####federation####
 * Arguments:  action, name
 * 'list' action:  list the currently registered federations.  'name' argument not required with this action.
 * 'check' action:  checks if a federation already exists with the specified name, If found, the returned code will contain "Yes, number: *n*", where *n* is an integer.
 * 'create' action:  creates a federation with the specified name.  Returns an error if it already exists.
 * 'delete' action:  deletes the federation with the specified name.
 
 ####info####
 * Arguments: (none)
 * If the requester is a supernode, returns a list of the other supernodes with both IP addresses and names.
 * If the requester is not a supernode, returns the IP and name supernode of the requestor's orchestra, or a message indicating the absence of a supernode.
 * If the requester is not registered, returns an error.
 
 ####init(\*)####
 * Arguments: (none)
 * Initializes the database.  If the database already exists, all data is destroyed.
 
 ####kick####
 * Arguments: ip
 * If requester is a supernode, unregisters the user with the specified IP address.
 * If requester is not a supernode, returns an error.
 
 ####lib.py####
 * Arguments: (none)
 * This is a library file used by other files in the folder.  Calling this will do nothing.
 
 ####orchestra####
 * Arguments: action, name, federation
 * 'list' action:  list all current orchestras.  Name and federation arguments not required.
 * 'check' action:  check if an orchestra already exists with the specified name. If found, the returned code will contain "Yes, number: *n*", where *n* is an integer.
 * 'create' action:  create an orchestra with the specified name.  If the orchestra already exists, return an error.
 * 'delete' action:  delete the orchestra with the specified name.
 
 ####register####
 * Arguments: name, orchestra, supernode, conductor
 * Registers the requester's IP
 * Name is a string, orchestra is the integer ID of the orchestra to register in, supernode is a boolean to determine if the user should be registered as a supernode, conductor is a boolean to determine if the user should be registered as a conductor
 * Returns an error if the requested name is already taken or if the IP address is already registered.
 
 ####reset(\*)####
 * Arguments: (none)
 * Deletes all data currently in the databases.
 
 ####unregister####
 * Arguments: (none)
 * Deletes the user corresponding to the requester from the database.  To unregister an arbitrary user, see kick.py.
 
 ####usercheck####
 * Arguments: type, ip, name
 * 'ip' type:  check if a user with the specified IP address is registered.
 * 'name' type:  check if a user with the specified name is registered.
 
 
 
 ##Implementation Plan##
 * Python group:  Rajeev Sharma (rdsharma), Andrew Israel (abi)
     * Use Python CGI on AFS
     * SQLite for database
     * Rajeev:  Database schema, front-end, documentation
     * Andrew:  Back-end, integration
 * Java group: Scott Bertiaux (sebertia), Afnan Fahim
 (afahim)
-
+    * Use Java Servlets on Google App Engine
+    * Cloud SQL for database
+    * Afnan: Database, Back-end, consistency with Python implementation
 
 [Home](/p/floctrl/wiki/)
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Afnan Fahim</dc:creator><pubDate>Tue, 03 Apr 2012 14:25:57 -0000</pubDate><guid>https://sourceforge.net49b45dc4bb4106125b3a5700edd37603fc9ab519</guid></item><item><title>WikiPage server-connection modified by Roger B. Dannenberg</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>&lt;pre&gt;&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Roger B. Dannenberg</dc:creator><pubDate>Thu, 29 Mar 2012 02:10:47 -0000</pubDate><guid>https://sourceforge.net646b82d43ceff8748b03b67451625d8146bdb1ff</guid></item><item><title>WikiPage server-connection modified by Roger B. Dannenberg</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>&lt;pre&gt;--- v15 
+++ v16 
@@ -28,7 +28,13 @@
 
 Once the existence of the orchestra is established, use URL "register" to register the node with name, orchestra, federation, supernode (yes/no), and conductor (yes/no).
 
-The response contains ... [you are here] ...
+The response contains nodes and/or supernodes...
+
+If you are a node, you need to connect to your supernode. The supernode ip, if it exists, appears in the response: Look for the string "Your supernode:" in some response line. In the following line, split the line into fields separated by blanks and take the 3rd field, numbered from 1 through N, (the supernode name, e.g. "/cmu/rbd") and the 4th field (the supernode ip).
+
+If there is no supernode, you should wait for the supernode to connect to you.
+
+
 
 
 ##Python Implementation##
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Roger B. Dannenberg</dc:creator><pubDate>Thu, 29 Mar 2012 02:09:31 -0000</pubDate><guid>https://sourceforge.net4ba18deb555b289cb90e5c89b17654dea99ea2b4</guid></item><item><title>WikiPage server-connection modified by Roger B. Dannenberg</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>&lt;pre&gt;--- v14 
+++ v15 
@@ -26,7 +26,9 @@
 If the result is -1, create the orchestra with createOrchestra(), invoking URL "orchestra". 
 Before creating an orchestra, call getFederationId(), invoking URL "federation" to get an integer. If the result is -1, create the federation with createFederation(), invoking URL "federation".
 
+Once the existence of the orchestra is established, use URL "register" to register the node with name, orchestra, federation, supernode (yes/no), and conductor (yes/no).
 
+The response contains ... [you are here] ...
 
 
 ##Python Implementation##
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Roger B. Dannenberg</dc:creator><pubDate>Wed, 28 Mar 2012 19:12:05 -0000</pubDate><guid>https://sourceforge.netcbf3ecf4aa5bce4b5bbffc44643a00efd9e4820e</guid></item><item><title>WikiPage server-connection modified by Roger B. Dannenberg</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>&lt;pre&gt;--- v13 
+++ v14 
@@ -23,8 +23,10 @@
 Based on my (RBD) reverse-engineering of the Connection code, here are some notes on the design and how to use the server:
 
 Call getOrchestraId(orchName), invoking URL "orchestra" to get an integer.
-If the result is -1
-Call getFederationId(
+If the result is -1, create the orchestra with createOrchestra(), invoking URL "orchestra". 
+Before creating an orchestra, call getFederationId(), invoking URL "federation" to get an integer. If the result is -1, create the federation with createFederation(), invoking URL "federation".
+
+
 
 
 ##Python Implementation##
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Roger B. Dannenberg</dc:creator><pubDate>Wed, 28 Mar 2012 19:07:28 -0000</pubDate><guid>https://sourceforge.net86eafba21aae3682c495c6c0bf6c883044e95a68</guid></item><item><title>WikiPage server-connection modified by Roger B. Dannenberg</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>&lt;pre&gt;--- v12 
+++ v13 
@@ -19,49 +19,56 @@
 
 The conductor has special status, and (in our implementation), there should only be one conductor. Thus, the conductor should register with the server so that others can discover the conductor, the conductor's super-node, and so that only one node is allowed to become the conductor. Coordinate with the [conducting interface](conducting) group, the [chat system](chat) group and maybe others to integrate this functionality into the system.
 
-
+##Design##
+Based on my (RBD) reverse-engineering of the Connection code, here are some notes on the design and how to use the server:
+
+Call getOrchestraId(orchName), invoking URL "orchestra" to get an integer.
+If the result is -1
+Call getFederationId(
+
+
 ##Python Implementation##
 An implementation has been completed in Python.  Functionality is provided via GET requests.  It is available at [http://www.music.cs.cmu.edu/cgi-bin/](http://www.music.cs.cmu.edu/cgi-bin/)\*.  Files marked with an asterisk are password-protected.  If you look at the code it should be pretty easy to tell how to get pass the password.  The functionality and required parameters are as follows:
 
 ####admin(\*)####
 * Arguments: (none)
 * Web interface for controlling server.  Should not be used for any other purpose; hook into other files.
 
 ####conductor####
 * Arguments: (none)
 * If the IP of the requester belongs to a registered user, returns information about the conductor and the conductor's supernode.
 * If the requester is not registered, returns an error.
 
 ####federation####
 * Arguments:  action, name
 * 'list' action:  list the currently registered federations.  'name' argument not required with this action.
-* 'check' action:  checks if a federation already exists with the specified name
+* 'check' action:  checks if a federation already exists with the specified name, If found, the returned code will contain "Yes, number: *n*", where *n* is an integer.
 * 'create' action:  creates a federation with the specified name.  Returns an error if it already exists.
 * 'delete' action:  deletes the federation with the specified name.
 
 ####info####
 * Arguments: (none)
 * If the requester is a supernode, returns a list of the other supernodes with both IP addresses and names.
 * If the requester is not a supernode, returns the IP and name supernode of the requestor's orchestra, or a message indicating the absence of a supernode.
 * If the requester is not registered, returns an error.
 
 ####init(\*)####
 * Arguments: (none)
 * Initializes the database.  If the database already exists, all data is destroyed.
 
 ####kick####
 * Arguments: ip
 * If requester is a supernode, unregisters the user with the specified IP address.
 * If requester is not a supernode, returns an error.
 
 ####lib.py####
 * Arguments: (none)
 * This is a library file used by other files in the folder.  Calling this will do nothing.
 
 ####orchestra####
 * Arguments: action, name, federation
 * 'list' action:  list all current orchestras.  Name and federation arguments not required.
-* 'check' action:  check if an orchestra already exists with the specified name.
+* 'check' action:  check if an orchestra already exists with the specified name. If found, the returned code will contain "Yes, number: *n*", where *n* is an integer.
 * 'create' action:  create an orchestra with the specified name.  If the orchestra already exists, return an error.
 * 'delete' action:  delete the orchestra with the specified name.
 
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Roger B. Dannenberg</dc:creator><pubDate>Wed, 28 Mar 2012 19:04:26 -0000</pubDate><guid>https://sourceforge.net107afd031b2d649bb999bfd6d8885c4ebf7d5d2a</guid></item><item><title>WikiPage server-connection modified by Rajeev Sharma</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>&lt;pre&gt;--- v11 
+++ v12 
@@ -21,7 +21,7 @@
 
 
 ##Python Implementation##
-An implementation has been completed in Python.  Functionality is provided via GET requests.  It is available at [http://www.music.cs.cmu.edu/cgi-bin/*.py](http://www.music.cs.cmu.edu/cgi-bin/).  Files marked with an asterisk are password-protected.  If you look at the code it should be pretty easy to tell how to get pass the password.  The functionality and required parameters are as follows:
+An implementation has been completed in Python.  Functionality is provided via GET requests.  It is available at [http://www.music.cs.cmu.edu/cgi-bin/](http://www.music.cs.cmu.edu/cgi-bin/)\*.  Files marked with an asterisk are password-protected.  If you look at the code it should be pretty easy to tell how to get pass the password.  The functionality and required parameters are as follows:
 
 ####admin(\*)####
 * Arguments: (none)
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rajeev Sharma</dc:creator><pubDate>Tue, 20 Mar 2012 20:38:13 -0000</pubDate><guid>https://sourceforge.neted48a768ff061c2240460dfff0fd737bdf448e78</guid></item><item><title>WikiPage server-connection modified by Rajeev Sharma</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>&lt;pre&gt;--- v10 
+++ v11 
@@ -23,63 +23,63 @@
 ##Python Implementation##
 An implementation has been completed in Python.  Functionality is provided via GET requests.  It is available at [http://www.music.cs.cmu.edu/cgi-bin/*.py](http://www.music.cs.cmu.edu/cgi-bin/).  Files marked with an asterisk are password-protected.  If you look at the code it should be pretty easy to tell how to get pass the password.  The functionality and required parameters are as follows:
 
-####admin.py(\*)####
-* Arguments: (none)
+####admin(\*)####
+* Arguments: (none)
 * Web interface for controlling server.  Should not be used for any other purpose; hook into other files.
 
-####conductor.py####
+####conductor####
 * Arguments: (none)
 * If the IP of the requester belongs to a registered user, returns information about the conductor and the conductor's supernode.
 * If the requester is not registered, returns an error.
 
-####federation.py####
+####federation####
 * Arguments:  action, name
 * 'list' action:  list the currently registered federations.  'name' argument not required with this action.
 * 'check' action:  checks if a federation already exists with the specified name
 * 'create' action:  creates a federation with the specified name.  Returns an error if it already exists.
 * 'delete' action:  deletes the federation with the specified name.
 
-####info.py####
+####info####
 * Arguments: (none)
 * If the requester is a supernode, returns a list of the other supernodes with both IP addresses and names.
 * If the requester is not a supernode, returns the IP and name supernode of the requestor's orchestra, or a message indicating the absence of a supernode.
 * If the requester is not registered, returns an error.
 
-####init.py(\*)####
+####init(\*)####
 * Arguments: (none)
 * Initializes the database.  If the database already exists, all data is destroyed.
 
-####kick.py####
+####kick####
 * Arguments: ip
 * If requester is a supernode, unregisters the user with the specified IP address.
 * If requester is not a supernode, returns an error.
 
 ####lib.py####
 * Arguments: (none)
 * This is a library file used by other files in the folder.  Calling this will do nothing.
 
-####orchestra.py####
+####orchestra####
 * Arguments: action, name, federation
 * 'list' action:  list all current orchestras.  Name and federation arguments not required.
 * 'check' action:  check if an orchestra already exists with the specified name.
 * 'create' action:  create an orchestra with the specified name.  If the orchestra already exists, return an error.
 * 'delete' action:  delete the orchestra with the specified name.
 
-####register.py####
+####register####
 * Arguments: name, orchestra, supernode, conductor
 * Registers the requester's IP
 * Name is a string, orchestra is the integer ID of the orchestra to register in, supernode is a boolean to determine if the user should be registered as a supernode, conductor is a boolean to determine if the user should be registered as a conductor
 * Returns an error if the requested name is already taken or if the IP address is already registered.
 
-####reset.py(\*)####
+####reset(\*)####
 * Arguments: (none)
 * Deletes all data currently in the databases.
 
-####unregister.py####
+####unregister####
 * Arguments: (none)
 * Deletes the user corresponding to the requester from the database.  To unregister an arbitrary user, see kick.py.
 
-####usercheck.py####
+####usercheck####
 * Arguments: type, ip, name
 * 'ip' type:  check if a user with the specified IP address is registered.
 * 'name' type:  check if a user with the specified name is registered.
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rajeev Sharma</dc:creator><pubDate>Tue, 20 Mar 2012 18:47:24 -0000</pubDate><guid>https://sourceforge.net68765fe4c4d0599a806146c195451dcf22757a3e</guid></item><item><title>WikiPage server-connection modified by Rajeev Sharma</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>&lt;pre&gt;--- v9 
+++ v10 
@@ -41,8 +41,8 @@
 
 ####info.py####
 * Arguments: (none)
-* If the requester is a supernode, returns a list of the other supernodes.
-* If the requester is not a supernode, returns the supernode of the requestor's orchestra.
+* If the requester is a supernode, returns a list of the other supernodes with both IP addresses and names.
+* If the requester is not a supernode, returns the IP and name supernode of the requestor's orchestra, or a message indicating the absence of a supernode.
 * If the requester is not registered, returns an error.
 
 ####init.py(\*)####
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rajeev Sharma</dc:creator><pubDate>Fri, 09 Mar 2012 04:06:07 -0000</pubDate><guid>https://sourceforge.net9a8f918eb1715084871769ee7775ae3791f08a79</guid></item><item><title>WikiPage server-connection modified by Rajeev Sharma</title><link>https://sourceforge.net/p/floctrl/wiki/server-connection/</link><description>&lt;pre&gt;--- v8 
+++ v9 
@@ -19,81 +19,81 @@
 
 The conductor has special status, and (in our implementation), there should only be one conductor. Thus, the conductor should register with the server so that others can discover the conductor, the conductor's super-node, and so that only one node is allowed to become the conductor. Coordinate with the [conducting interface](conducting) group, the [chat system](chat) group and maybe others to integrate this functionality into the system.
 
-##Python API##
+
+##Python Implementation##
 An implementation has been completed in Python.  Functionality is provided via GET requests.  It is available at [http://www.music.cs.cmu.edu/cgi-bin/*.py](http://www.music.cs.cmu.edu/cgi-bin/).  Files marked with an asterisk are password-protected.  If you look at the code it should be pretty easy to tell how to get pass the password.  The functionality and required parameters are as follows:
 
 ####admin.py(\*)####
 * Arguments: (none)
 * Web interface for controlling server.  Should not be used for any other purpose; hook into other files.
 
 ####conductor.py####
 * Arguments: (none)
 * If the IP of the requester belongs to a registered user, returns information about the conductor and the conductor's supernode.
 * If the requester is not registered, returns an error.
 
 ####federation.py####
 * Arguments:  action, name
 * 'list' action:  list the currently registered federations.  'name' argument not required with this action.
 * 'check' action:  checks if a federation already exists with the specified name
 * 'create' action:  creates a federation with the specified name.  Returns an error if it already exists.
 * 'delete' action:  deletes the federation with the specified name.
 
 ####info.py####
 * Arguments: (none)
 * If the requester is a supernode, returns a list of the other supernodes.
 * If the requester is not a supernode, returns the supernode of the requestor's orchestra.
 * If the requester is not registered, returns an error.
 
 ####init.py(\*)####
 * Arguments: (none)
 * Initializes the database.  If the database already exists, all data is destroyed.
 
 ####kick.py####
 * Arguments: ip
 * If requester is a supernode, unregisters the user with the specified IP address.
 * If requester is not a supernode, returns an error.
 
 ####lib.py####
 * Arguments: (none)
 * This is a library file used by other files in the folder.  Calling this will do nothing.
 
 ####orchestra.py####
 * Arguments: action, name, federation
 * 'list' action:  list all current orchestras.  Name and federation arguments not required.
 * 'check' action:  check if an orchestra already exists with the specified name.
 * 'create' action:  create an orchestra with the specified name.  If the orchestra already exists, return an error.
 * 'delete' action:  delete the orchestra with the specified name.
 
 ####register.py####
 * Arguments: name, orchestra, supernode, conductor
 * Registers the requester's IP
 * Name is a string, orchestra is the integer ID of the orchestra to register in, supernode is a boolean to determine if the user should be registered as a supernode, conductor is a boolean to determine if the user should be registered as a conductor
 * Returns an error if the requested name is already taken or if the IP address is already registered.
 
 ####reset.py(\*)####
 * Arguments: (none)
 * Deletes all data currently in the databases.
 
 ####unregister.py####
 * Arguments: (none)
 * Deletes the user corresponding to the requester from the database.  To unregister an arbitrary user, see kick.py.
 
 ####usercheck.py####
 * Arguments: type, ip, name
 * 'ip' type:  check if a user with the specified IP address is registered.
 * 'name' type:  check if a user with the specified name is registered.
 
 
-Design
-------
-* Details, including format of http: requests, format of reply, how data is stored on the server, etc.
-* How does a node become a conductor? How do others find out how to send a chat message to the conductor?
-* Another group is going to implement server scripts or servelets for [monitoring performance](server-performance) and system status, so be sure to coordinate with them.
-
-Implementation Plan
--------------------
-* It would be best to split into two groups of two: one group does a Python implementation on a CMU server (see Roger Dannenberg for access and help), and the other does a Java Servelets implementation on a Google server (see Edith Law for access and help). 
-
-* Who does what when?
+
+##Implementation Plan##
+* Python group:  Rajeev Sharma (rdsharma), Andrew Israel (abi)
+    * Use Python CGI on AFS
+    * SQLite for database
+    * Rajeev:  Database schema, front-end, documentation
+    * Andrew:  Back-end, integration
+* Java group: Scott Bertiaux (sebertia), Afnan Fahim
+(afahim)
+
 
 [Home](/p/floctrl/wiki/)
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rajeev Sharma</dc:creator><pubDate>Fri, 09 Mar 2012 00:42:25 -0000</pubDate><guid>https://sourceforge.netcfca5c8362de1998db82b918da479c9cf3902a49</guid></item></channel></rss>