diff -r fcf435874395 -r 45c889eae324 front_idill/extern/fajran-npTuioClient/src/plugin.cpp --- a/front_idill/extern/fajran-npTuioClient/src/plugin.cpp Thu Apr 19 11:53:06 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,363 +0,0 @@ -// -// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -/* - Modified by alexandre.bastien@iri.centrepompidou.fr to manage TUIO strings. -*/ - -#include "plugin.h" - -#include -#include -#include -#define D(s) /*std::cerr << s << std::endl;*/ - -#include - -#define MIME_TYPES_HANDLED "application/x-tuio" -// The name must be this value to get flash movies that check the -// plugin version to load. -#define PLUGIN_NAME "TUIO Client" -#define MIME_TYPES_DESCRIPTION MIME_TYPES_HANDLED":tuio:"PLUGIN_NAME - -#define PLUGIN_DESCRIPTION "TUIO Client plugin" - -extern NPNetscapeFuncs NPNFuncs; - -NPBool plugInitialized = FALSE; - -static std::set instances; - -void tuio_callback(TuioEventData data) -{ - std::set::iterator iter; - for (iter = instances.begin(); iter != instances.end(); iter++) { - (*iter)->event(data); - } -} - -void -PR_CALLBACK Destructor(void * /* data */) -{ -#if 0 - /* - * We don't actually free the storage since it's actually allocated - * on the stack. Normally, this would not be the case and this is - * the opportunity to free whatever. - */ - PR_Free(data); -#endif -} - -/// \brief Return the MIME Type description for this plugin. -char* -NPP_GetMIMEDescription(void) -{ - return const_cast(MIME_TYPES_DESCRIPTION); -} - -// -// general initialization and shutdown -// - -/// \brief Initialize the plugin -/// -/// This C++ function gets called once when the plugin is loaded, -/// regardless of how many instantiations there is actually playing -/// movies. So this is where all the one time only initialization -/// stuff goes. -NPError -NS_PluginInitialize() -{ - if ( plugInitialized ) - { - return NPERR_NO_ERROR; - } - - plugInitialized = TRUE; - - tuio_start(80); - - return NPERR_NO_ERROR; -} - -/// \brief Shutdown the plugin -/// -/// This C++ function gets called once when the plugin is being -/// shutdown, regardless of how many instantiations actually are -/// playing movies. So this is where all the one time only -/// shutdown stuff goes. -void -NS_PluginShutdown() -{ -#if 0 - if (!plugInitialized) - { -#if GNASH_PLUGIN_DEBUG > 1 - std::cout << "Plugin already shut down" << std::endl; -#endif - return; - } - - plugInitialized = FALSE; -#endif - - tuio_stop(); -} - - - -/// \brief Retrieve values from the plugin for the Browser -/// -/// This C++ function is called by the browser to get certain -/// information is needs from the plugin. This information is the -/// plugin name, a description, etc... -NPError -NS_PluginGetValue(NPPVariable aVariable, void *aValue) -{ - NPError err = NPERR_NO_ERROR; - - switch (aVariable) - { - case NPPVpluginNameString: - *static_cast (aValue) = PLUGIN_NAME; - break; - - // This becomes the description field you see below the opening - // text when you type about:plugins and in - // navigator.plugins["Shockwave Flash"].description, used in - // many flash version detection scripts. - case NPPVpluginDescriptionString: - *static_cast(aValue) = PLUGIN_DESCRIPTION; - break; - - case NPPVpluginNeedsXEmbed: - *(int*)aValue = PR_TRUE; - break; - - case NPPVpluginTimerInterval: - - case NPPVpluginKeepLibraryInMemory: - - default: - err = NPERR_INVALID_PARAM; - break; - } - return err; -} - -/// \brief construct our plugin instance object -/// -/// This instantiates a new object via a C++ function used by the -/// browser. -nsPluginInstanceBase * -NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct) -{ - if(!aCreateDataStruct) return NULL; - - return new nsPluginInstance(aCreateDataStruct); -} - -/// \brief destroy our plugin instance object -/// -/// This destroys our instantiated object via a C++ function used by the -/// browser. -void -NS_DestroyPluginInstance(nsPluginInstanceBase* aPlugin) -{ - delete static_cast (aPlugin); -} - -// -// nsPluginInstance class implementation -// - -/// \brief Constructor -nsPluginInstance::nsPluginInstance(nsPluginCreateData* data) - : - nsPluginInstanceBase(), - _instance(data->instance), - _port(3333), - _callback("tuio_callback") -{ - for (size_t i=0, n=data->argc; iargn[i]) - { - name = data->argn[i]; - } - - if (data->argv[i]) - { - val = data->argv[i]; - } - - else if ( ! strstr(name.c_str(), "callback") ) - { - _callback = val; - } - - else if ( ! strstr(name.c_str(), "port") ) - { - _port = atoi(val.c_str()); - } - } - - instances.insert(this); -} - -/// \brief Destructor -nsPluginInstance::~nsPluginInstance() -{ - instances.erase(this); -} - -/// \brief Initialize an instance of the plugin object -/// -/// This methods initializes the plugin object, and is called for -/// every movie that gets played. This is where the movie playing -/// specific initialization goes. -NPBool -nsPluginInstance::init(NPWindow* aWindow) -{ - D("[ns] init"); - return TRUE; -} - -/// \brief Shutdown an instantiated object -/// -/// This shuts down an object, and is called for every movie that gets -/// played. This is where the movie playing specific shutdown code -/// goes. -void -nsPluginInstance::shut() -{ - D("[ns] shut"); -} - -NPError -nsPluginInstance::SetWindow(NPWindow* aWindow) -{ - D("[ns] SetWindow"); - - if(!aWindow) - { - return NPERR_INVALID_PARAM; - } - - return NPERR_NO_ERROR; -} - -NPError -nsPluginInstance::GetValue(NPPVariable aVariable, void *aValue) -{ - return NS_PluginGetValue(aVariable, aValue); -} - -/// \brief Write a status message -/// -/// This writes a status message to the status line at the bottom of -/// the browser window and the console firefox was started from. -NPError -nsPluginInstance::WriteStatus(const char *msg) const -{ - NPN_Status(_instance, msg); - std::cout << msg << std::endl; - - return NPERR_NO_ERROR; -} - -NPError -nsPluginInstance::NewStream(NPMIMEType /*type*/, NPStream* stream, - NPBool /*seekable*/, uint16* /*stype*/) -{ - D("[ns] NewStream"); - return NPERR_NO_ERROR; -} - -NPError -nsPluginInstance::DestroyStream(NPStream* /*stream*/, NPError /*reason*/) -{ - D("[ns] DestroyStream"); - return NPERR_NO_ERROR; -} - -int32_t -nsPluginInstance::WriteReady(NPStream* /* stream */ ) -{ - D("[ns] WriteReady"); - return 0x0fffffff; -} - -int32_t -nsPluginInstance::Write(NPStream* /*stream*/, int32_t /*offset*/, int32_t len, - void* buffer) -{ - D("[ns] Write: len=" << len); - return len; -} - -typedef struct { - NPP instance; - TuioEventData data; -} Event; - -void test(void* ev) -{ - D("ev=" << ev); - Event* event = (Event*)ev; - D("event=" << event); - std::stringstream ss; - ss << "javascript:tuio_callback("; - ss << event->data.type << ", "; - ss << event->data.sid << ", "; - ss << event->data.fid << ", "; - ss << event->data.x << ", "; - ss << event->data.y << ", "; - ss << event->data.z << ", "; - ss << event->data.a << ", "; - if(event->data.code == NULL || event->data.code == "") - ss << "\"\");"; - else - ss << "\"" << event->data.code << "\"" << ");"; - - NPN_GetURL(event->instance, ss.str().c_str(), "_self"); - - delete event; -} - -void nsPluginInstance::event(TuioEventData data) -{ - D("[event] callback: type=" << data.type - << ", sid=" << data.sid << ", fid=" << data.fid - << ", x=" << data.x << ", y=" << data.y - << ", z=" << data.z << ", a=" << data.a - << ", code=" << "\"" << data.code << "\""); - - Event* ev = new Event(); - ev->instance = _instance; - ev->data = data; - - NPN_PluginThreadAsyncCall(_instance, test, ev); -} - -// Local Variables: -// mode: C++ -// indent-tabs-mode: t -// End: