Einzelnen Beitrag anzeigen

NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#1

TS3-Plugin Sourcecode für Delphi

  Alt 6. Jun 2012, 17:15
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
Miniaturansicht angehängter Grafiken
ts3_plugin.png  
Angehängte Dateien
Dateityp: rar TS-Plugin Units.rar (17,8 KB, 109x aufgerufen)
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.

Geändert von NickelM (24. Jun 2012 um 06:46 Uhr)
  Mit Zitat antworten Zitat