Outils pour utilisateurs

Outils du site


using_perspective_broker

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
using_perspective_broker [2022/12/02 18:16] – sergeusing_perspective_broker [2022/12/16 10:42] (Version actuelle) – [Using Perspective Broker] serge
Ligne 1: Ligne 1:
 ======Using Perspective Broker====== ======Using Perspective Broker======
 +{{ :media_01:apkv_20.svg |}}
 +
 +{{ ::labo.svg |}}
 +
 <WRAP center round info centeralign 60%> <WRAP center round info centeralign 60%>
-**Niveau Pro et intergalactique !**+**Niveau Pro et intergalactique !**\\ 
 +Cette API: 
 +  * a entre 15 et 20 ans 
 +  * n'est que vaguement maintenu 
 +  * un exemple au moins ne marche pas 
 +  * le tranfert de datas simples marche 
 +  * le transfert d'objets complexes ne marche pas 
 +  * les exemples ne respectent pas le PEP 8, c'est imbriqué au possible
 </WRAP> </WRAP>
  
Ligne 421: Ligne 432:
  
  
 +def main():
 +    clt = Client()
 +    factory = pb.PBClientFactory()
 +    reactor.connectTCP("localhost", 8800, factory)
 +    factory.getRootObject().addCallback(clt.on_start)
 +    reactor.run()
 +
 +main()
 +</file>
 +
 +=====Transfert d'une image ou d'un json=====
 +On peut transférer n'import quoi mais il faut toujours convertir ses datas en bytes (octets) avant de les envoyer. Et les décoder à la réception.
 +<file python >
 +from time import sleep
 +from threading import Thread
 +
 +import numpy as np
 +import cv2
 +
 +from twisted.internet import reactor
 +from twisted.spread import pb
 +
 +class MyImage:
 +    def __init__(self):
 +        self.img = cv2.imread('./covers/Fasokan.jpg')
 +        img = cv2.resize(self.img, (512, 512))
 +        encode_param=[int(cv2.IMWRITE_JPEG_QUALITY), 90]
 +        result, imgencode = cv2.imencode('.jpg', img, encode_param)
 +        data = np.array(imgencode)
 +        print(data.shape)
 +        self.stringData = data.tobytes()
 +
 +
 +class ObjetPrincipal(pb.Root):
 +    def __init__(self):
 +        self.mi = MyImage()
 +    def remote_image(self):
 +        print("Le serveur envoie une image")
 +        return self.mi.stringData
 +
 +# L'objet principal réseau qui tourne
 +root_obj = ObjetPrincipal()
 +
 +reactor.listenTCP(8800, pb.PBServerFactory(root_obj))
 +reactor.run()
 +</file>
 +
 +<file python >
 +import numpy as np
 +import cv2
 +import base64
 +from twisted.internet import reactor
 +from twisted.spread import pb
 +
 +
 +class GetImage(pb.Copyable):
 +    def get_image(self, stringData):
 +        image = np.asarray(bytearray(stringData), dtype="uint8")
 +        image = cv2.imdecode(image, cv2.IMREAD_COLOR)
 +        print(image.shape)
 +        cv2.imshow('SERVER', image)
 +        cv2.waitKey(0)
 +        cv2.destroyAllWindows()
 +
 +class RemoteGetImage(pb.RemoteCopy):
 +    pass
 +
 +pb.setUnjellyableForClass(GetImage, RemoteGetImage)
 +
 +class Client:
 +    """Permet de créer l'objet principal client qui tourne"""
 +    def __init__(self):
 +        """self.root_obj_client sera l'objet principal du serveur root_obj"""
 +        self.root_obj_client = None
 +        self.gi = GetImage()
 +    def on_start(self, obj):
 +        print(f"on_start: got client_accessible object from server = {obj}")
 +        self.root_obj_client = obj
 +        # Transfert d'une image
 +        self.root_obj_client.callRemote("image").addCallback(self.gi.get_image)
 +        
 def main(): def main():
     clt = Client()     clt = Client()
using_perspective_broker.1670004962.txt.gz · Dernière modification : de serge