Hallo zusammen,
Hiermit stelle ich den Sourcecode für das TS3-Client-Plugin System rein.
Es ist der kompatible Code für die Plugin-Version 16.
Hier ein Beispiel, wie soeine Projekt-Datei ausehen könnte.
- Update Plugin
API zu Version 17
+ ts3_functions : Neue Plugin Funktionen : getClientDisplayName, getBookmarkList, getProfileList, guiConnect, guiConnectBookmark, createBookmark.
+ plugin_definitions : Neue Type für neue Plugin funktionen hinzugefügt.
Delphi-Quellcode:
library ts3_testplugin;
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
Informationen als PChar- oder ShortString-Parameter übergeben. }
uses
SysUtils,
public_errors,
public_errors_rare,
public_definitions,
public_rare_definitions,
ts3_functions,
plugin_definitions,
plugin;
var ts3Func : TS3Functions;
const PLUGIN_API_VERSION = 17;
function ts3plugin_name() : PAnsiChar;
cdecl;
begin
//Der Name des Plugins
Result := '
Mein erstes Plugin';
end;
function ts3plugin_version() : PAnsiChar;
cdecl;
begin
//Ein Versionsstring, von deinem Plugin.
Result := '
1.2';
end;
function ts3plugin_apiVersion() : Integer;
cdecl;
begin
//Nur oben Konstante ändern; NICHT HIER ÄNDER!
Result := PLUGIN_API_VERSION;
end;
function ts3plugin_author() : PAnsiChar;
cdecl;
begin
//Der Authorname.
Result := '
NickelM';
end;
function ts3plugin_description() : PAnsiChar;
cdecl;
begin
//Beschreibung des Plugins, falls du mehrer Zeilen haben willst, musst du
//das denk ich mal so machen
Result := PAnsiChar('
Testplugin' + sLineBreak + '
Zweite Zeile des Plugins');
end;
procedure ts3plugin_setFunctionPointers(funcs : TS3Functions);
cdecl;
begin
//Wichtigste Funktion. Am besten nichts ändern
ts3Func := funcs;
end;
function ts3plugin_init() : Integer;
cdecl;
begin
//Gebe hier den Code an, der beim Initalisieren der DLL ausgeführt wird.
//Gib 0 zurück bei Erfolgreich.
//Gib 1 zurück bei Fehlschlag.
Result := 0;
end;
procedure ts3plugin_shutdown();
cdecl;
begin
//Hier dein Code beim
end;
//Ab hier kommen die Funktionen, die in der Plugin.pas deklariert sind.
//Einfach aus der Plugin.pas hierhin kopieren und unten bei "exports" den
//Funktionsname einfügen.
function ts3plugin_onTextMessageEvent(serverConnectionHandlerID : uint64;
targetMode : anyID; toID : anyID; fromID : anyID; fromName : PAnsiChar;
fromUniqueIdentifier: PAnsiChar;
message: PAnsiChar; ffIgnored : Integer) : Integer;
cdecl;
var myID : anyID;
toUI : PAnsiChar;
begin
//Falls der TS3 Client die Message sowieso ignoriert.
if Boolean(ffIgnored)
then
begin
Result := 0;
//Client will ignore the message anyways, so return value here doesn't matter */
Exit;
end;
//Ab hier kommt ein Beispiel-Code
//TargetMode ist die Msg-Art :
//1 = PrivateMsg; Die anderen werden ServerMsg und ChannelMsg sein.
//Was für ein Wert die haben, habe ich noch nicht getestet.
if targetMode = 1
then
begin
//serverConnectionHandlerID ist sozusagen der der "Tab-Handle" zum Server.
//Es ist sozusagen ein Handle zur Verbindung.
//Eigene ID abrufen.
ts3Func.getClientID(serverConnectionHandlerID, @myID);
//Falls die FromID, also wovon die Msg kommt, ungleich der eigenen ist,
//man will denk ich mal die eigenen Msg nicht wirklich überprüfen.
if (fromID <> myID)
then
begin
//Hier ein Code.
end;
end;
//Wenn du fertig bist, oder auch zwischendurch, setze des Result
//auf 0, das sie vom Client normal angezeigt, bzw. normal behandelt wird, also
//falls du sagt, trotz deines Codes, soll der Client normal mit der Msg umgehen.
//Bei 1 sagst du dem Client, er soll die Msg ignorieren, also nicht anzeigen.
Result := 0;
end;
exports
//GANZ WICHTIG, ALLE FUNKTIONSNAMEN VON DEN PLUGIN-FUNKTIONEN HIER
//HINZUFÜGEN.
//Diese müssen aufjedenfall, in jedem Plugin sein...
ts3plugin_name,
//<--
ts3plugin_version,
//<--
ts3plugin_apiVersion,
//<--
ts3plugin_author,
//<--
ts3plugin_description,
//<--
ts3plugin_setFunctionPointers,
//<--
ts3plugin_init,
//<--
ts3plugin_shutdown,
//<--
//Ab hier kannst du die anderen Funktionen hinzufügen.
//Dies sind sogenannte Callback-Funktionen, also Events,
//die vom TS3-Client gesendet werden.
ts3plugin_onTextMessageEvent;
begin
end.
Im Anhang, die Rar-Datei mit allen Units, inklusive ein Bild, wie das Beispielplugin in TS3 angezeigt wird.
Wenn ihr fertig seit, geht ihr in Delphi auf Projekt->"Projektname" erzeugen.
Damit bekommt ihr eine
DLL, die ihr dan ins TS3-Client Verzeichniss in den Ordner "plugins" kopiert.
Fertig. Der Code ist für eine 32bit
DLL getestet worden, für einen 32bit TS3-Client. Ob dies für einen 64bit TS3-Client geht, weis ich nicht, da ich kein Delphi XE2, sowie kein 64bit Windows habe
.
Viel Spass damit.
Gruß NickelM