// // TFFlashLCSHMEM.h // Touché // // Created by Georg Kaindl on 16/3/09. // // Copyright (C) 2009 Georg Kaindl // // This file is part of Touché. // // Touché is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as // published by the Free Software Foundation, either version 3 of // the License, or (at your option) any later version. // // Touché 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 Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with Touché. If not, see . #if !defined(__TFFlashLCSHMEM_H__) #define __TFFlashLCSHMEM_H__ 1 #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifdef WIN32 #include typedef DWORD u_int32_t; #else #include #include #endif #define TFLCS_LISTENER_NAME_MAX_LEN (64) #define TFLCS_LISTENER_METHOD_MAX_LEN (64) typedef struct TFLCSLocalConnection_t { #ifdef WIN32 HANDLE semaphore; HANDLE mapFile; LPVOID mapAddress; #else int shmid; sem_t* semaphore; #endif int open; char* data; char listenerName[TFLCS_LISTENER_NAME_MAX_LEN]; char listenerMethod[TFLCS_LISTENER_METHOD_MAX_LEN]; } TFLCSLocalConnection_t; typedef enum { TFLCSErrorSuccess = 0, TFLCSErrorInvalidArgument = 1, TFLCSErrorShmemKeyNotFound = 2, TFLCSErrorSemaphoreCreationFailed = 3, TFLCSErrorShmemIDNotFound = 4, TFLCSErrorShmemOpeningFailed = 5, TFLCSErrorOutOfMemory = 6 } TFLCSError_t; // much like errno, this will hold the last error that happened extern TFLCSError_t TFLCSErrno; // connect to a Flash LocalConnection // returns pointer to structure on success, NULL otherwise // if the connection could not be opened right away (because Flash is not yet running), // a non-null pointer is returned, but the "open" member of the structure will be 0 // and TFLCSErrno will be set accordingly. the connection is truly open once "open" is // non-zero. TFLCSLocalConnection_t* TFLCSConnect(const char* listenerName, const char* listenerMethod, void* shmemKey, void* semaphoreKey); // disconnect a Flash LocalConnection void TFLCSDisconnect(TFLCSLocalConnection_t* connection); // changes the connection listener name void TFLCSChangeListenerName(TFLCSLocalConnection_t* connection, const char* newListenerName); // changes the connection method name void TFLCSChangeMethodName(TFLCSLocalConnection_t* connection, const char* newMethodName); // returns non-zero if the given connection's Flash client is connected, 0 otherwise int TFLCSConnectionHasConnectedClient(TFLCSLocalConnection_t* connection); // tries to determine the key for the shared memory region used by the Flash LocalConnection // returns a pointer to static memory on success, NULL on error. void* TFLCSGuessShmemKey(); // get the current tick count (milliseconds since the system was started) u_int32_t TFLCSGetTickCount(); // write an AMF3-encoded integer into a buffer // returns the updated buffer position int TFLCSWriteAMF3Integer(char* buffer, int value, int pos); // write an AMF-encoded string into a buffer // returns the updated buffer position int TFLCSWriteAMFString(char* buffer, const char * str, int pos); // write an AMF3-encoded byte array into a buffer // returns the updated buffer position int TFLCSWriteAMF3ByteArray(char* buffer, const char* bytes, int pos, int len); // writes the AMF envelope header for an LC method call // returns the position in the buffer int TFLCSWriteLCAMFEnvelopeHeader(TFLCSLocalConnection_t* connection); // writes the AMF envelope trailer for an LC method call // returns the updated buffer position int TFLCSWriteLCAMFEnvelopeTrailer(TFLCSLocalConnection_t* connection, int pos); // sends the given data of length len over the given connection as a ByteArray // returns 1 on success, 0 otherwise int TFLCSSendByteArray(TFLCSLocalConnection_t* connection, const char* bytes, int len); // gets the (string) names of all connected LC connections // returns the number of found strings. int TFLCSGetConnectedConnectionNames(TFLCSLocalConnection_t* connection, char* dest, int destLen); // dumps a given buffer (size bytes starting at offset) to stdout in a nice hex/ascii format. // useful for debugging purposes. void TFLCSDumpMemory(char* buffer, int offset, int size); #ifdef __cplusplus } #endif /* __cplusplus */ #endif //__TFFlashLCSHMEM_H__ /* TUIO C++ Library Copyright (c) 2005-2017 Martin Kaltenbrunner This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3.0 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. */ #ifndef INCLUDED_FLASHSENDER_H #define INCLUDED_FLASHSENDER_H #include "OscSender.h" #define MAX_FLASH_SIZE (40976) #define DEFAULT_LC_CONN_NAME "_OscDataStream" #define DEFAULT_LC_METH_NAME "receiveOscData" namespace TUIO { /** * The FlashSender implements the Flash LocalConnection transport method for OSC * * @author Martin Kaltenbrunner * @version 1.1.6 */ class LIBDECL FlashSender : public OscSender { public: /** * The default constructor creates a FlashSender using a Flash LocalConnection on localhost */ FlashSender(); /** * The default constructor creates a FlashSender using a Flash LocalConnection on localhost */ FlashSender(const char *conn_name, const char *meth_name); /** * The destructor closes the connection. */ virtual ~FlashSender(); /** * This method delivers the provided OSC data * * @param *bundle the OSC stream to deliver * @return true if the data was delivered successfully */ bool sendOscPacket (osc::OutboundPacketStream *bundle); /** * This method returns the connection state * * @return true if the connection is alive */ bool isConnected (); const char* tuio_type() { return "TUIO/FLC"; } private: TFLCSLocalConnection_t* lcConnection; }; } #endif /* INCLUDED_FLASHSENDER_H */