I'm glad to introduce the ts3 ipc plugin.
What it does:
With this plugin enabled, you have the possibility to interact with the client and react to the client's events within your external applications.
Why would I need it?
Some of you missed some kind of TSRemote app (known from TeamSpeak 2), with this plugin and your own app this could be realized.
Why should I use this plugin and lib instead of using the clientquery plugin?
My clientlib is nearly the whole plugin SDK transformed into interprocess communication functions and it offers a similar interface. If you use the clientquery plugin you need to parse the output yourself, with this lib, you get the data types you need (eg. string, clientids[anyID], channelids[uint64],...).
What you will get:
Included in the download are the plugin (ts3_ipcplugin.so/libts3_ipcplugin.so), the shared library to interact with the plugin (ts3_ipcplugin_client_lib.dll/libts3_ipcplugin_client_lib.so), the lib to link with and the C-Headers to include in your project.
libts3_ipcplugin.so/ts3_ipcplugin.dll - This is the plugin, put it in your TS3 plugins directory.
libts3_ipcplugin_client_lib.so/ts3_ipcplugin_client_lib.dll - This is the library you can use in your project. Put it in a directory of your PATH variable or in the working directory of your project.
Can I use the full plugin sdk?
Not quite. The functions to interact with the FMOD library are not implemented and the new functions ts3plugin_infoTitle, ts3plugin_infoData, ts3plugin_freeMemory are also not, because of the possible high frequency of calling.
The "clients" can't change the return values of events like processCommand, onClientPoke, onTextMessage, etc.
The event onUserLoggingMessage won't be broadcastet, if the ts3 ipc plugin itself logs a message.
Everything else can be used.
Which programming languages are supported?
Every language which can load shared C libraries, so for example C, C++, C#, Delphi, VB,...
There is a C/C++ header included, so C and C++ can be used immediately. For other languages you need to load the library manually (see your language documentation for more information).
Supported OS: Linux 32/64 bit, Windows 32/64 bit
Hopefully, I will add a release for Mac in a couple of days.
Download: http://www.planetteamspeak.com/compo...id,69/gid,106/ (Plugin API version 8 / Client Beta29)
EDIT: Updated to plugin/lib version 1.02 (21.08.2010)
EDIT: Updated to plugin/lib version 1.03 (18.09.2010)
Download Example: http://download.planetteamspeak.com/...ib_example.zip
(Shows how to react on the events and how to call some functions)
Note for windows users: The plugin is compiled with MinGW, if you don't have it, copy the two other DLL in the MAIN directory of your TeamSpeak 3 installation.
The windows plugin is listening to port 61337, but only allows clients from the same machine. (On Linux the plugin uses unix domain sockets, so no port is used.)
Note for linux users: You need to link your applications with pthread (link with -lpthread).
I am looking forward to some feedback 
Code-Example
Code:
...
#include "ipc_client_commands.h"
#include "public_errors.h"
#ifdef linux
#include <sys/ipc.h>
#endif
void onProcessCommand(uint64 schid, const char* cmd, void* ptr) {
//react here on the event or do some pseudo oop call with ((myclasstype*)ptr)->processCommand(schid, cmd)
}
void onPluginLoaded() {
//will be called, when the ts3 client starts and the plugin is loaded
}
int main(int argc, char** argv) {
#ifdef WIN32
unsigned int ret = initSDK("plus");
#else
key_t key = ftok("./", 42);
unsigned int ret = initSDK(key);
#endif
if (ret == ERROR_ok) {
ts3_ipc_event_callbacks cbs;
memset(&cbs, 0, sizeof(ts3_ipc_event_callbacks));
cbs.processCommand = onProcessCommand;
//cbs.object = pmyclass;
if (registerCallbacks(cbs) != ERROR_ok)
;//error
//do some other fantastic code
//...
}
else if (ret == IPC_ERROR_NO_SERVER) {
if (callOnPluginInitiation(onPluginLoaded) == ERROR_ok)
printf("plugin is not running, but I will be called, if it's up\n");
else printf("some error occured in specifying callback function\n");
}
//...
if (shutdownSDK() != ERROR_ok)
;//error while shutting down the connection to the plugin
}
return 0;
}