Socket

Communication bidirectionnelle entre l'application Front et Manager.

Importation

      

import {inject} from "inversify";
import "reflect-metadata";
import SocketService from "@adclz/fevermainlib/services/socket";
 
export default class MyClass {
private SocketService: SocketService
 
constructor(@inject(SocketService) SocketService: SocketService) {
this.SocketService = SocketService
}
}
 

Sous services

Il y a 2 sous services nommés FrontQueue, BackQueue. En effet à la différence de l'api rest, l'envoi de reqûetes au socket se fait de façon "brute" et n'attends pas de réponse du serveur.
Pour pouvoir savoir quand une reqûete peut être envoyé, MainLib possède ces 2 sous services qui sont des piles stockant les reqûetes.

Lorsque vous tentez d'envoyer une reqûete via le socket, celle-ci est stockée dans la pile de BackQueue.
Manager informe MainLib lorsqu'une tâche a été finie, permettant ainsi d'envoyer la reqûete suivante.

La sécurité ne repose pas sur le service BackQueue, Manager possède lui aussi une pile interne qui stocke les reqûetes et se met à jour seul.
Ces sous-services permettent surtout d'avoir une "vue" de ce que fais Manager.

FrontQueue stocke les requêtes envoyés par Manager et les lis au fur et à mesure, une fois qu'une reqûete est lue, la pile se met à jour.

RestTasks

📜 Champs

State

SocketService.prototype.State: number

Etat du Socket.

ValeurEtatDescription
0CONNECTINGLa connection est en cours
1OPENLa connection est établie
2CLOSINGLa connection est en cours de fermeture.
3CLOSEDLa connection est fermée.
4UNDEFINEDSocket inexistant.

FrontQueue

SocketService.prototype.FrontQueue: FrontQueue

Accès à la pile de réception des requêtes.

BackQueue

SocketService.prototype.BackQueue: BackQueue

Accès à la pile d'envoi des reqûetes.

Mediateur

📢 Notifications

OnNewSocketState

Notifie lorsque le Socket a changé d'état.

      

import {OnNewSocketState} from "@adclz/fevermainlib/services/socket";
 
InjectedMediator.Notification(OnNewSocketState).Subscribe("MyClassId", DataNotification => {
console.log(DataNotification)
(parameter) DataNotification: number
})
 

⚙️ Requêtes

TryConnect

Tente une connection au socket.

      

import {TryConnect} from "@adclz/fevermainlib/services/socket";
 
InjectedMediator.Request(new TryConnect({Url: "ws://localhost:7892", Token: "RestToken"}))
(alias) new TryConnect(data: { Url: string; Token: string; }): TryConnect import TryConnect
 

RunTia

Demande l'éxecution d'une nouvelle instance de Tia.

      

import {RunTia} from "@adclz/fevermainlib/services/socket";
 
InjectedMediator.Request(new RunTia())
(alias) new RunTia(): RunTia import RunTia
 

ConnectTia

Demande la connection à une instance de Tia existante.

      

import {ConnectTia} from "@adclz/fevermainlib/services/socket";
 
InjectedMediator.Request(new ConnectTia())
(alias) new ConnectTia(): ConnectTia import ConnectTia
 

LockPlc

Verouillage d'un automate.

      

import {LockPlc} from "@adclz/fevermainlib/services/socket";
 
const PlcUid = ""
InjectedMediator.Request(new LockPlc(PlcUid))
(alias) new LockPlc(Uid: string): LockPlc import LockPlc
 

LockHmi

Verouillage d'une hmi.

      

import {LockHmi} from "@adclz/fevermainlib/services/socket";
 
const HmiUid = ""
InjectedMediator.Request(new LockHmi(HmiUid))
(alias) new LockHmi(Uid: string): LockHmi import LockHmi
 

UnlockPlc

Déverouillage d'un automate.

      

import {UnlockPlc} from "@adclz/fevermainlib/services/socket";
 
InjectedMediator.Request(new UnlockPlc())
(alias) new UnlockPlc(): UnlockPlc import UnlockPlc
 

UnlockHmi

Déverrouillage d'une hmi.

      

import {UnlockHmi} from "@adclz/fevermainlib/services/socket";
 
InjectedMediator.Request(new UnlockHmi())
(alias) new UnlockHmi(): UnlockHmi import UnlockHmi
 

OpenBlockInEditor

Ouverture d'un bloc dans l'éditeur de TiaPortal.

      

import {OpenBlockInEditor} from "@adclz/fevermainlib/services/socket";
 
const BlockName = ""
InjectedMediator.Request(new OpenBlockInEditor(BlockName))
(alias) new OpenBlockInEditor(Uid: string): OpenBlockInEditor import OpenBlockInEditor
 

Refresh

Rafraîchis toutes les machines à état.

      

import {Refresh} from "@adclz/fevermainlib/services/socket";
 
InjectedMediator.Request(new Refresh())
(alias) new Refresh(): Refresh import Refresh