Revision: 8259
http://playerstage.svn.sourceforge.net/playerstage/?rev=8259&view=rev
Author: rtv
Date: 2009-09-14 17:26:16 +0000 (Mon, 14 Sep 2009)
Log Message:
-----------
new functionality
Modified Paths:
--------------
code/websim/CMakeLists.txt
code/websim/src/req_sim.cc
code/websim/src/websim.cc
code/websim/src/websim.hh
Added Paths:
-----------
code/websim/COPYING.txt
code/websim/README.txt
code/websim/img/
code/websim/img/favicon.ico
Modified: code/websim/CMakeLists.txt
===================================================================
--- code/websim/CMakeLists.txt 2009-09-11 23:13:24 UTC (rev 8258)
+++ code/websim/CMakeLists.txt 2009-09-14 17:26:16 UTC (rev 8259)
@@ -149,19 +149,15 @@
-#INSTALL (FILES README.txt COPYING.txt DESTINATION .)
-INSTALL (FILES DESTINATION .)
+INSTALL (FILES DESTINATION .)
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "WebSim")
-#SET(CPACK_PACKAGE_DESCRIPTION_FILE "/home/abbas/websim/README.txt")
-#SET(CPACK_RESOURCE_FILE_LICENSE "/home/abbas/websim/COPYING.txt")
-#SET(CPACK_RESOURCE_FILE_README "/home/abbas/websim/README.txt")
-SET(CPACK_PACKAGE_VERSION_MAJOR "0")
-SET(CPACK_PACKAGE_VERSION_MINOR "1")
-SET(CPACK_PACKAGE_VERSION_PATCH "0")
-SET(CPACK_PACKAGE_VERSION "0.1")
-SET(CPACK_PACKAGE_VENDOR "Richard Vaughan")
+SET(CPACK_PACKAGE_VENDOR "The Player Project")
+# SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.txt")
+SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING.txt")
+SET(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.txt")
+SET(CPACK_PACKAGE_VERSION_MAJOR ${V_MAJOR})
+SET(CPACK_PACKAGE_VERSION_MINOR ${V_MINOR})
+SET(CPACK_PACKAGE_VERSION_PATCH ${V_BUGFIX})
SET(CPACK_NSIS_DISPLAY_NAME "WebSim 0.1")
-
-
INCLUDE(CPack)
Added: code/websim/COPYING.txt
===================================================================
--- code/websim/COPYING.txt (rev 0)
+++ code/websim/COPYING.txt 2009-09-14 17:26:16 UTC (rev 8259)
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
Property changes on: code/websim/COPYING.txt
___________________________________________________________________
Added: svn:eol-style
+ native
Added: code/websim/README.txt
===================================================================
--- code/websim/README.txt (rev 0)
+++ code/websim/README.txt 2009-09-14 17:26:16 UTC (rev 8259)
@@ -0,0 +1,16 @@
+
+WebSim
+======
+
+A C++ library that implements an HTTP interface to robot simulators.
+
+Authors
+-------
++ Richard Vaughan
++ Brian Gerkey
++ Nate Koenig
++ Abbas Sadat
+
+Thanks
+-------
+WebSim's development was supported by Greg Broten and Simon Monkton of Defense
R&D Canada, Suffield.
Property changes on: code/websim/README.txt
___________________________________________________________________
Added: svn:eol-style
+ native
Added: code/websim/img/favicon.ico
===================================================================
(Binary files differ)
Property changes on: code/websim/img/favicon.ico
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: code/websim/src/req_sim.cc
===================================================================
--- code/websim/src/req_sim.cc 2009-09-11 23:13:24 UTC (rev 8258)
+++ code/websim/src/req_sim.cc 2009-09-14 17:26:16 UTC (rev 8259)
@@ -2,12 +2,10 @@
#include <stdlib.h>
using namespace websim;
-const double TICK_INTERVAL = 1.0;
+const uint32_t TICK_INTERVAL = 100; // 100 msec
// todo: XML format for more sim requests
-
-
bool WebSim::HandleSimRequest(const std::string& prop,
const std::string&
action,
Format format,
@@ -78,29 +76,23 @@
std::vector<std::string> links;
GenerateSampleUrls(links);
- //replacing 'HOST' by actual 'host:port' term
- for(unsigned int j=0;j<links.size();j++){
- unsigned int i=0;
- i = links[j].find("HOST");
- while(i!=std::string::npos){
+ std::string clockuri = "http://" + hostportname + "/sim/clock/get";
- links[j].replace(i, 4, hostportname);
- i = links[j].find("HOST");
- }
- }
-
response = "<html><head><title>WebSim</title></head>"
"<body>"
"<h1>Welcome to " + IdentificationString() + "</h1>"
"<p>" + package + "-" + version + " HTTP interface to " +
IdentificationString() + "-" + VersionString() +
"</h1>"
- "<hr>";
+ "<hr>"
+ "Example URIs available at this server:<br>"
+ "<ul>"
+ "<li><a href=" + clockuri + ">" + clockuri + "</a>";
for(unsigned int k=0;k<links.size();k++)
- response += links[k];
+ response += "<li>" + links[k] + "</li>";
- response +="<hr>"
+ response +="</ul><hr>"
"<p><a href=\"http://playerstage.org/index.php?src=websim\">WebSim</a>"
" is part of the <a href=\"http://playerstage.org\">Player Project</a>"
"</body></html>";
@@ -279,52 +271,35 @@
return false;
}
-void WebSim::GenerateSampleUrls(std::vector<std::string> &list){
-
+void WebSim::GenerateSampleUrls(std::vector<std::string> &list)
+{
std::vector<std::string> sensors;
std::vector<std::string> temp;
-
-
+
GetModelChildren("",temp);
- while(temp.size()>0 && sensors.size() < 50){
-
- std::string m = temp.at(0);
- temp.erase(temp.begin());
-
- unsigned int size = temp.size();
- GetModelChildren(m, temp);
- if(temp.size()==size){
-
- sensors.push_back(m);
-
- }
-
-
- }
-
- bool laser=false,ranger=false,fiducial=false;
-
-
- for(unsigned int i=0;i<sensors.size();i++){
-
- if(sensors[i].find("laser")!=std::string::npos && !laser){
- list.push_back("<a href=http://HOST/"+sensors[i]+"/data/get >
http://HOST/"+sensors[i]+"/data/get</a> <br>");
- laser = true;
- }
-
- if(sensors[i].find("fiducial")!=std::string::npos && !fiducial){
- list.push_back("<a href=http://HOST/"+sensors[i]+"/data/get >
http://HOST/"+sensors[i]+"/data/get</a> <br>");
- fiducial = true;
- }
-
- if((sensors[i].find("ranger")!=std::string::npos ||
sensors[i].find("irarray")!=std::string::npos) && !ranger){
- list.push_back("<a href=http://HOST/"+sensors[i]+"/data/get >
http://HOST/"+sensors[i]+"/data/get</a> <br>");
- ranger = true;
- }
+
+ while(temp.size()>0 && sensors.size() < 50)
+ {
+ std::string m = temp.at(0);
+ temp.erase(temp.begin());
-
- }
-
+ unsigned int size = temp.size();
+ GetModelChildren(m, temp);
+
+ if(temp.size()==size)
+ sensors.push_back(m);
+ }
+
+ char* names[] = { "laser", "ranger", "fiducial" };
+ unsigned int index = 0;
+
+ for(unsigned int i=0;i<sensors.size();i++)
+ if(sensors[i].find( names[index] )!=std::string::npos )
+ {
+ std::string uri = "http://" + hostportname +
"/"+sensors[i]+"/data/get";
+ list.push_back( "<a href=" + uri + ">" + uri + "</a> <br>");
+ index++;
+ }
}
Modified: code/websim/src/websim.cc
===================================================================
--- code/websim/src/websim.cc 2009-09-11 23:13:24 UTC (rev 8258)
+++ code/websim/src/websim.cc 2009-09-14 17:26:16 UTC (rev 8259)
@@ -32,6 +32,9 @@
#include <string.h>
#include <libxml/encoding.h>
+#include <iostream>
+#include <fstream>
+
#include "websim.hh"
using namespace websim;
@@ -104,39 +107,24 @@
}
}
-void WebSim::Confederate::TickCb( const std::string& name, Confederate* conf,
void* arg )
-{
- conf->Tick();
-}
-
void
-WebSim::Go()
+WebSim::Tick()
{
// tick all my confederates
- //ForEachConfederate( Confederate::TickCb, NULL );
-
- for( std::map<std::string,Confederate*>::iterator it = confederates.begin();
- it != confederates.end();
- it++ )
- it->second->Tick();
+ std::map<std::string,Confederate*>::iterator it;
+ for( it = confederates.begin(); it != confederates.end(); it++ )
+ it->second->Tick();
}
void
WebSim::Wait()
{
- if( tick_count_expected ) // if we're federated with anyone
- {
- ticks_remaining = tick_count_expected;
-
- while( unacknowledged_ticks || unacknowledged_pushes || ticks_remaining )
- {
- //printf( "event loop in wait (%d %d %d)\n",
- // unacknowledged_ticks, unacknowledged_pushes,
ticks_remaining );
- event_loop( EVLOOP_ONCE );
- }
- }
- else // not federated - just an isolated server
- event_loop( EVLOOP_NONBLOCK );
+ while( unacknowledged_ticks || unacknowledged_pushes || ticks_remaining )
+ {
+ printf( "event loop in wait (%d %d %d)\n",
+ unacknowledged_ticks, unacknowledged_pushes,
ticks_remaining );
+ event_loop( EVLOOP_ONCE );
+ }
}
void
@@ -272,8 +260,8 @@
return out;
}
+static const char* FAVICONFILE = "favicon.ico";
-
void
WebSim::EventCallback(evhttp_request* req, void* arg)
{
@@ -290,6 +278,43 @@
std::string response_string;
std::string model, prop, action, response;
puts(req->uri);
+
+ static char* favicon_data = NULL;
+ static int favicon_data_len = 0;
+
+ // handle favicon requests
+ if( strcmp( req->uri, "/favicon.ico" ) == 0 )
+ {
+ if( ! favicon_data )
+ {
+ std::ifstream in;
+ in.open( FAVICONFILE, std::ios::binary );
+
+ if( in.fail() )
+ {
+ evhttp_send_reply( req, 400, "File not
found", eb );
+ evbuffer_free(eb);
+ return;
+ }
+ else
+ {
+ puts( "loading favicon" );
+ in.seekg( 0, std::ios::end );
+ favicon_data_len = in.tellg();
+ in.seekg( 0, std::ios::beg );
+
+ favicon_data = new char[favicon_data_len];
+ in.read( favicon_data, favicon_data_len );
+ }
+ }
+
+ // we now have good favicon data
+ evbuffer_add( eb, favicon_data, favicon_data_len );
+ evhttp_send_reply( req, 200, "OK", eb );
+ evbuffer_free(eb);
+ return;
+ }
+
if(!obj->ParseURI(model, prop, action, req->uri, response))
{
response_code = 400;
Modified: code/websim/src/websim.hh
===================================================================
--- code/websim/src/websim.hh 2009-09-11 23:13:24 UTC (rev 8258)
+++ code/websim/src/websim.hh 2009-09-14 17:26:16 UTC (rev 8259)
@@ -68,11 +68,11 @@
void LoadFederationFile( const std::string& filename );
/** Wait for go signals from all confederates */
- void Wait();
-
- /** Send go signals to all confederates */
- void Go();
+ virtual void Wait();
+ /** Run one simulation step on all confederates */
+ void Tick();
+
// Interface to be implemented by simulators
==========================================================
/** Return a string that usefully identifies the simulator for a
@@ -101,9 +101,9 @@
whether or not the clock is currently paused. WebSim uses this to
implement
clock synchronization in simulator federation, but it can also be used
by end-users.
- @param seconds The amount of simulated time to run until pausing, in
seconds.
+ @param msec The amount of simulated time to run until pausing, in
milliseconds.
*/
- virtual bool ClockRunFor( double seconds )=0;
+ virtual bool ClockRunFor( uint32_t msec )=0;
/** Create a model of the specified type */
virtual bool CreateModel(const std::string& name,
@@ -116,7 +116,7 @@
/** Gets the type of the model from simulation.
@param name The name of the model
- @param tyep the type of the model
+ @param type the type of the model
@returns TRUE if the method is successful.
*/
@@ -542,7 +542,6 @@
int Push( const std::string& name, Pose p, Velocity v, Acceleration a
);
- static void TickCb( const std::string& name, Confederate* conf, void*
arg );
static void TickReplyCb( evhttp_request* req, void* arg );
// send a tick request to this host
@@ -550,7 +549,6 @@
// list of pointers to Puppet objects that are hosted on this
// connection - can iterate over these to update all puppets
- //GList* puppet_list;
std::list<Puppet*> puppet_list;
// unique ID for this confederate in format "hostname:port", used as
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit