Fonctions DMS SERVEUR Ces données sont valables et utilisables dans toutes applications DMS. ========================== Date : 23 mai 2007 Par : iri Révision : ========================== To Do : Compléter les structures Ajouter les fonctions liées aux User et aux UserInstances ========================== Contient : - Les structures - Les variables - Les fonctions - Des exemples ========================== Définitions des STRUCTURES dms SERVER : DMI -> dms/l/dhdms/score.pkg : ligne 248 GRAPH -> dms/l/dhdms/sgraph.pkg : ligne 12 Item -> dms/l/dhdms/score.pkg : ligne 228 CLIENT -> dms/l/dhdms/score.pkg : ligne 235 User -> dms/l/dhdms/score.pkg : ligne 232 UserI -> dms/l/dhdms/score.pkg : ligne 266 DEF -> dms/l/dhdms/sdef.pkg ligne 10 Tree -> dms/l/dhdms/score.pkg : ligne 246 NewTimer -> dms/l/dhdms/score.pkg : ligne 222 ========================== Variable dms SERVER DMSwin ObjWin -> Fenêtre mère DMSenv Env -> Environnement du server DMSserver Chn -> canal du server DMSdmi tab DMI -> tableau contenant la structure DMI de chaque module du site DMSnbDmi I -> nombre de modules utilisés dans le site DMSname S -> Nom du site siteDef DEF -> structure DEF du site srcDef S -> chemin complet du fichier *.dms du site siteGRAPH GRPAH -> structure GRAPH du site (contient notamment les liens inter- ou intra-modules) DMStimeout I -> temps d'inactivité tel que défini dans le *.dms du site _DMStime I -> nombre de secondes écoulé depuis le 1er janvier 1970 _DMStickcount I -> retourne le temps en ms écoulé depuis un événement lambda DMSclients [CLIENT r1] -> liste des clients connectés DMSport I -> port tcp du site typeof DMShttpport I -> port http du site DMSfileCli S -> Chemin du fichier *.scc DMSsender CLIENT -> structure CLIENT de l'émetteur d'un message client - serveur DMSpathname S -> chemin du fichier et du fichier *.dms sans l'extension. Exemple : worlds/mysite/sitetest DMSpath S -> chemin du fichier *.dms (sansle fichier) Exemple : worlds/mysite/ versionmin I -> version minimale compatible Scol et DMS, pour le client qui se connecte inclus (dms/l/dhdms/scomm.pkg ligne 10) srcpkgcli neededdmscli S -> liste des packages dms clients nécessaires Font ObjFont -> Fonte principale du site ========================== Fonctions dms SERVER : _adderror fun [S] S -> Ajoute une erreur sous forme textuelle dans la liste d'erreur propre au serveur. Si une telle erreur est ajoutée lors du chargement des modules du serveur, ce dernier stoppera avec une popup "Cannot Start Server" (fonction ' _stopiferror ' dans dms/l/dhdms/score.pkg) avant de le détruire. L'ensemble des erreurs se retrouveront dans le fichier de log _addwarning fun [S] S -> Ajoute un avertissement sous forme textuelle dans la liste d'erreur propre au serveur. Ne provoque pas une erreur bloquante. L'ensemble des avertissements se retrouveront dans le fichier de log _logBook fun [] S -> Retourne le contenu de la liste d'erreur propre au serveur _DMSrootModule fun [] Dmi -> Retourne la structure DMI associée au ' shell '. L'identifiant du ' shell ' est 0 (zéro) _DMSgetByHandle fun[I] DMI -> Retourne la structure DMI d'un module d'après son identifiant _DMSgetHandle fun[DMI] I -> Retourne l'identifiant d'un module d'après sa structure DMI _DMSgetName fun [DMI] S -> Retourne le nom d'un module d'après sa structure DMI _DMSbyx fun[I] CLIENT -> Retourne la structure CLIENT depuis DMSclients _DMSgetZones fun[DMI] [[S r1] r1] -> Retourne les infos de la zone srv telles que définies dans le fichier *.dms (à ne pas confondre avec la fonction suivante !!) _DMSgetZone fun[DMI S fun [S] I fun[[ObjWin I I I I] S] I fun [S] I] [ObjWin I I I I] -> Retourne la fenêtre (la zone du SCS) associée à un module et les positions / dimensions de cette dernière (x, y, w, h) _DMSservice fun [CLIENT S] I -> Affiche un "message de service" (popup) à un client En entrée, le client et le contenu du message à afficher _DMSgetpath fun [S] S -> Retourne le chemin d'aprèslepathd'unfichier. Exemple : _DMSgetpath("folder/ssfolder/file.ext") retourne "folder/ssfolder/" _DMSrelativpath fun [S [S r1]] [S r1] -> Retourne une liste de fichiers avec leur path compet depuis la même liste de chemin relatifs, typiquement les "./file d'un fichier de définition de module (.dmc) _DMSgetDef fun[DMI S] [[S r1] r1] -> Retourne le bloc de définition d'un module tel que défini dans le fichier *.dms. En entrée : la structure DMI correspondante au module souhaité (peut être différente du module courant) Le nom du bloc interne dudit module (dans le fichier *.dms, ces blocs commencent par un "def nom_du_bloc" et se termine par un "enddef". Par exemple "def link" ... enddef" _DMSupdateDef fun[DMI S [[S r1] r1]] I -> Met à jour le bloc de définition d'un module dans l'architecture dms. Ne modifie pas le fichier *.dms. En entrée : la structure DMI du module à mettre à jour Le nom du bloc à mettre à jour (si plusieurs blocs à mettre à jour, recommencer l'opération autant de fois que nécessaire) Les données au format strextr _DMSdelete fun [DMI] I -> Détruit l'instance d'un module _DMSgetLogin fun [CLIENT] S -> Retourne le pseudo d'un visiteur d'après sa structure CLIENTE _DMSsetLogin fun [CLIENT S] S -> Donne un pseudo à la structure CLIENT associée à un visiteur _DMSbyLogin _DMSbyLoginI fun [S] CLIENT -> Retourne la structure CLIENT d'après le pseudo d'un visiteur (en respectant la casse ou pas) _DMSgetIP fun [CLIENT] S -> Retourne l'IP courante d'un visiteur d'après sa structure CLIENT _DMSclientAlive fun [CLIENT] I -> Retourne si un visiteur est connecté ou pas, d'après sa structure CLIENT (teste son canal) _DMSgetLanguage fun [CLIENT] S -> Retourne la langue utilisée par le visiteur (structure CLIENT) _DMSdelClient fun [CLIENT] I -> Déconnecte un client du site (se termine par la génération d'un event "out"). _DMSgetId fun [CLIENT] I -> Retourne l'identifiant unique d'un visiteur d'après sa structure CLIENT _DMSbyId fun [I] CLIENT -> Retourne la structure CLIENT d'un visiteur d'après son identifiant numérique unique _DMSgetRess fun [CLIENT S] S -> Retourne la valeur associée à une clé de ressource Rien à voir avec les ressources Scol, il s'agit ici de ressources DMS associée à un CLIENT _DMSsetRess fun [CLIENT S S] S -> Ajoute une ressource dms CLIENT au CLIENT Rien à voir avec les ressources Scol, il s'agit ici de ressources DMS associée à un CLIENT _ITEMcreate fun [S S I I] Item -> Crée un Item. Les entrées sont : Le nom de la référence, le nom de l'item, sa quantité et une date _ITEMref fun [Item] S -> Retourne la référence d'un item _ITEMcount fun [ITEM] I -> Retourne la quantité d'un Item _ITEMname fun [Item] S -> Retourne le nom de l'item _DMSaddItem fun [CLIENT Item] -> Ajoute un nouvel item à la structure Item d'un CLIENT Ancienne fonction compatible _DMSsubItem -> Ancienne fonction compatible _DMSfindItem fun [CLIENT S] -> Retourne l'Item d'une référence associée à un CLIENT Ancienne fonction compatible _DMSclearItem fun [CLIENT] I -> Détruitl a structure d'Item associée à un CLIENT Ancienne fonction compatible _DMStagKeppAlive fun [Tag] I -> Indique que le tag doit être conservé même s’il ne lui est pas répondu immédiatement. _DMStagForget fun [Tag] I -> Indique que le tag peut-être oublié. _DMSreplyTag fun [Tag S [User r1] I] I -> Répond au tag en lui passant un paramètre, et en indiquant si le tag doit être détruit ou pas _DMSaddThm _DMSgetDMIclients fun [DMI] [CLIENT r1] -> Retourne la liste des CLIENT connectés à un module _DMSregister fun [DMI fun [CLIENT] I fun [CLIENT] I fun [] I] I _DMSregisterDMI fun [DMI fun [DMI CLIENT S S S] I fun [CLIENT] I fun [] I] I -> Enregistre les callbacks d'un module. _DMScreateClientDMI fun [DMI CLIENT S] -> Crée une instance du module chez un client _DMSsend fun [DMI CLIENT Comm] I -> Envoie une Comm à un client _DMSdefineActions fun [DMI [ [S fun [DMI User S S [User r1] Tag] I ] r1]] I -> Définit les callbacks des actions d'un module _DMSremoveActions fun [DMI [S r1]] I -> Supprime des actions de la liste _DMShookInactiveClientActions fun [DMI [[ S fun [CLIENT S] I] r1]] [[S fun [CLIENT S] I] r1] -> Actions en cas d'inactivité du CLIENT _DMSeventTag fun [DMI User S S [User r1] Tag] I -> Génère un événement avec un flag _DMSgetClass fun [DMI] S -> Retourne le nom du fichier dmc d’un module _DMScbUpload fun [DMI fun [CLIENT S S] I] I -> Définit la fonction à exécuter lorsqu'un client uploade un fichier sur le serveur New_starttimer fun [Chn I] NewTimer -> Crée un timer d'une certaine période dans un canal précisé. Retourne la structure NewTimer associée. New_rfltimer fun [NewTimer fun [NewTimer u0] u1 u0] -> callback associée New_deltimer fun [NewTimer] i -> Destruction du timer _DEFsave fun [] I -> Enregistre l'ensemble de la structure dms dans le fichier *.dms, notamment après un ' _DMSupdateDef ' par exemple DEFparseDocCli fun [S] [[S r1] r1] -> Retourne le contenu du fichier *.scc associé au site (au format strextr) DEFgetLocal fun [] DEF -> Lit le contenu du fichier *.dms et en retourne la structure DEF qu'il décrit (à vérifier toutefois) _DEFinit fun [S] S -> Sans grand intérêt ... Modifie en un seul coup les constantes ' srcDef ', ' DMSpathname ' et ' DMSpath ' _DEFget fun [] I -> Calcule la structure DEF du site et met à jour la variable ' siteDef ' (ce quiimplique un parse complet du fichier*.dms). N'est normalement utile qu'au lancement du site. Enregistre automatiquement le site en .dms si nécessaire (version scs) _DEFgetRoot fun [] DEF -> Retourne la structure DEF du site (c'est équivalent à ' siteDef ' et permet d'éviter de modifier involontairement ' siteDef '). _DEFgetDef fun [DEF S] DEF -> Retourne la sous-structure DEF de la structure DEF du site pour un bloc de définitions données du fichier*.dms _DEFgetSub fun [DEF] [DEF r1] -> Retourne la liste des sous-structures DEF d'une structure DEF passée en argument. _DEFupdate fun [DMI S [[S r1] r1]] [[S r1] r1] -> Met à jour la définition d'un module. Utiliser ' _DMSupdateDef ' plutôt. _GRAPHid fun [GRAPH] I -> Retournel'identifiant d'une structure GRAPH _GRAPHinit fun [] I -> Initialisation de la structure GRAPH mère et de l'arbre des modules DMI _GRAPHclientLinks fun [GRAPH] ? -> Donne les liens clients (sous quelle structure ?). Utilisé lors de la demande de création d'un client par le serveur (' _DMScreateClientDMI ') _GRAPHgetLinks fun [GRAPH S] [[GRAPH S S S [[S r1] r1] I] r1] -> Retourne la sous-structure associée à un event GRAPHfindLinkCli fun [GRAPH ? S] I -> ? auniveau des actions ============================= Exemples 1- Trouver l'identifiant d'un module nommé "X" parle concepteur du site. typeof XidDmi = I;; fun searchIdDmi(id, s)= if id == 0 then 0 else let _DMSgetName _DMSgetByHandle id -> d in if (!strcmp d s) then id else searchIdDmi id-1 s;; set XidDmi = searchIdDmi DMSnbDmi "X";