Un autre client API Routeros Delphi. Prend en charge l'API sur TLS et Routeros 6.43+ Méthode de connexion de l'API.
Documentation officielle de l'API: https://wiki.mikrotik.com/wiki/Manual:API
MIKROTIK Forum Sujet: https://forum.mikrotik.com/viewtopic.php?f=9&t=31555
Il s'agit d'une implémentation du client API Mikrotik Routeros pour Delphi. Il prend en charge l'exécution des demandes parallèles à un routeur et possède une interface de base de données pour faciliter l'utilisation.
L'unité Routerosapi contient une définition de deux classes dont vous avez besoin pour travailler avec le protocole API de vos programmes Delphi.
Cette classe résume les propriétés et les méthodes pour établir une connexion à un routeur via le protocole API Routeros.
Cette fonction se connecte au routeur et effectue une procédure de connexion. Il renvoie vrai si la connexion a réussi, fausse autrement.
Fait une requête au routeur. La demande est un tableau de chaînes, la première étant la commande et d'autres sont des paramètres. Si getAllafterQuery est vrai , alors trosapiresult.getall est exécuté après avoir envoyé une requête.
Si vous n'avez pas besoin de recevoir de sortie de votre requête, utilisez cette méthode. Il appelle simplement la fonction de requête et libère objet renvoyé.
Avec cette propriété, vous pouvez définir la valeur de délai d'expiration pour les opérations de réseau (en millisecondes).
Cette propriété en lecture seule contient une description textuelle de la dernière erreur s'est produite.
Se déconnecte du routeur.
Cette classe vous donne la capacité de travailler avec les données renvoyées des requêtes. Chaque exécution de commande est "isolée" dans son objet Trosapiresult , vous pouvez donc faire des demandes parallèles en appelant Trosapiclient.Query et en recevant plusieurs objets Trosapiresult .
Renvoie la valeur du paramètre de nom ( mot en termes d'API) dans la phrase actuelle. La façon préférée d'obtenir le résultat est la suivante: apiresult ['parmname'] au lieu de apiresult.valueByName ('parmname') . Vous pouvez utiliser le nom de param avec et sans leader '=' caractères ( apiresult ['adresse'] et apirsult ['= adresse'] renvoie le même résultat).
Renvoie la phrase actuelle du résultat de la requête (le type est la trosapisence).
Reçoit une phrase du routeur. Si le paramètre d'attente est vrai , la fonction attendra que la phrase soit reçue. Si l'attente est fausse et qu'aucune phrase n'a été reçu pour l'instant, la fonction renvoie fausse . Ceci est utile lors de l'exécution de commandes infinies (comme «écouter») dans l'interface graphique, lorsque vous devez traiter les actions d'autres utilisateurs: vous devez appeler périodiquement getOne avec wait = false , et en cas de résultat négatif, faites quelque chose d'autre pendant un certain temps.
Reçoit toutes les phrases jusqu'à «Done», puis renvoie True (ou Faux en cas de délai d'attente).
Renvoie le nombre de phrases reçues après avoir appelé Getall .
Renvoie True s'il y a plus de phrases dans le résultat de la requête.
Renvoie vrai s'il y avait des pièges pendant Getall
Revient vrai si la phrase «! Terminée» a été reçue dans getone
Passe à la phrase suivante reçue dans getall
Annule l'exécution de la commande actuelle.
L'exemple d'application Apest peut être téléchargée dans la section des versions: https://github.com/chupaka/delphi-routeros-api/releases
Au début, nous devons déclarer une variable et créer une instance de trosapiclient :
var
RouterOS: TRosApiClient;
RouterOS := TRosApiClient.Create;Maintenant, nous nous connectons au routeur et effectuons la procédure de connexion:
if RouterOS.Connect( ' 192.168.0.1 ' , ' admin ' , ' password ' ) then
begin
// we are connected successfully
end
else
begin
// an error occured; text error message is in LastError property
end ;Toutes les requêtes sont effectuées en appelant la fonction de requête de Trosapiclient . Il renvoie une instance de trosapireult à partir de laquelle toutes les données sont récupérées.
var
Res: TRosApiResult;
Res := RouterOS.Query([ ' /system/resource/print ' ], True);Res := ROS.Query([ ' /ip/arp/print ' , ' ?interface=ether2 ' ], True);
while not Res.Eof do
begin
SomeProcessingFunction(Res[ ' .id ' ], Res[ ' address ' ]);
Res.Next;
end ;
Res.Free;Tout d'abord, placez une minuterie sur le formulaire et le nomz tmrListen , défini activé sur false . Ensuite, nous faisons une requête et permons la minuterie:
ResListen := ROS.Query([ ' /log/listen ' ], False);
tmrListen.Enabled := True;Ensuite, nous vérifions un nouveau événement de données sur la minuterie:
procedure TForm1.tmrListenTimer (Sender: TObject);
begin
repeat
if not ResListen.GetOne(False) then Break;
if ResListen.Trap then
begin
ShowMessage( ' Trap: ' + ROS.LastError);
Break;
end ;
if ResListen.Done then
begin
ShowMessage( ' Done ' );
ResListen.Free;
tmrListen.Enabled := False;
Break;
end ;
Memo1.Lines.Add(ResListen[ ' time ' ] + ' : ' + ResListen[ ' message ' ]);
until False;
end ;Pour les discussions et les suggestions, vous pouvez consulter le client API Delphi de threads Mikrotik Forum Routeros API Delphi