author | Edouard Tisserant |
Fri, 15 Nov 2019 10:34:14 +0100 | |
branch | svghmi |
changeset 2816 | d813ecfe8941 |
parent 2799 | f5da343b9b63 |
child 2819 | 3b99c908f43b |
permissions | -rw-r--r-- |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
1 |
#!/usr/bin/env python |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
2 |
# -*- coding: utf-8 -*- |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
3 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
4 |
# This file is part of Beremiz |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
5 |
# Copyright (C) 2019: Edouard TISSERANT |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
6 |
# See COPYING file for copyrights details. |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
7 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
8 |
from __future__ import absolute_import |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
9 |
import errno |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
10 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
11 |
from twisted.web.server import Site |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
12 |
from twisted.web.resource import Resource |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
13 |
from twisted.internet import reactor |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
14 |
from twisted.web.static import File |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
15 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
16 |
from autobahn.twisted.websocket import WebSocketServerFactory, WebSocketServerProtocol |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
17 |
from autobahn.websocket.protocol import WebSocketProtocol |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
18 |
from autobahn.twisted.resource import WebSocketResource |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
19 |
|
2773 | 20 |
# TODO multiclient : |
21 |
# session list lock |
|
22 |
# svghmi_sessions = [] |
|
23 |
||
24 |
svghmi_session = None |
|
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
25 |
|
2774
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
26 |
svghmi_send_collect = PLCBinary.svghmi_send_collect |
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
27 |
svghmi_send_collect.restype = ctypes.c_int # error or 0 |
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
28 |
svghmi_send_collect.argtypes = [ |
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
29 |
ctypes.POINTER(ctypes.c_uint32), # size |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
30 |
ctypes.POINTER(ctypes.c_void_p)] # data ptr |
2774
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
31 |
# TODO multiclient : switch to arrays |
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
32 |
|
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
33 |
svghmi_recv_dispatch = PLCBinary.svghmi_recv_dispatch |
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
34 |
svghmi_recv_dispatch.restype = ctypes.c_int # error or 0 |
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
35 |
svghmi_recv_dispatch.argtypes = [ |
2788
2ed9ff826d03
SVGHMI: Work in progress. C side mostly implemented, neither built nor tested.
Edouard Tisserant
parents:
2779
diff
changeset
|
36 |
ctypes.c_uint32, # size |
2779
75c6a31caca6
SVGHMI: Work In Progress : fixed pointer types in ctypes interface, cleaned up server startup and cleanup code, changed document type to XHTML, cleaner JS script : encapsulated in a function and in CDATA.
Edouard Tisserant
parents:
2777
diff
changeset
|
37 |
ctypes.c_char_p] # data ptr |
2774
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
38 |
# TODO multiclient : switch to arrays |
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
39 |
|
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
40 |
class HMISession(object): |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
41 |
def __init__(self, protocol_instance): |
2773 | 42 |
global svghmi_session |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
43 |
|
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
44 |
# Single client : |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
45 |
# Creating a new HMISession closes pre-existing HMISession |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
46 |
if svghmi_session is not None: |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
47 |
svghmi_session.close() |
2773 | 48 |
svghmi_session = self |
49 |
self.protocol_instance = protocol_instance |
|
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
50 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
51 |
# TODO multiclient : |
2773 | 52 |
# svghmi_sessions.append(self) |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
53 |
# get a unique bit index amont other svghmi_sessions, |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
54 |
# so that we can match flags passed by C->python callback |
2775
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
55 |
|
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
56 |
def close(self): |
2773 | 57 |
global svghmi_session |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
58 |
if svghmi_session == self: |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
59 |
svghmi_session = None |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
60 |
self.protocol_instance.sendClose(WebSocketProtocol.CLOSE_STATUS_CODE_NORMAL) |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
61 |
|
2772 | 62 |
def onMessage(self, msg): |
2779
75c6a31caca6
SVGHMI: Work In Progress : fixed pointer types in ctypes interface, cleaned up server startup and cleanup code, changed document type to XHTML, cleaner JS script : encapsulated in a function and in CDATA.
Edouard Tisserant
parents:
2777
diff
changeset
|
63 |
# pass message to the C side recieve_message() |
75c6a31caca6
SVGHMI: Work In Progress : fixed pointer types in ctypes interface, cleaned up server startup and cleanup code, changed document type to XHTML, cleaner JS script : encapsulated in a function and in CDATA.
Edouard Tisserant
parents:
2777
diff
changeset
|
64 |
svghmi_recv_dispatch(len(msg), msg) |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
65 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
66 |
# TODO multiclient : pass client index as well |
2777
cdf6584953a0
SVGHMI: WIP for python<->C data exchange : message from browser hit the C side.
Edouard Tisserant
parents:
2776
diff
changeset
|
67 |
|
2775
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
68 |
|
2774
9857b4b0d979
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2773
diff
changeset
|
69 |
def sendMessage(self, msg): |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
70 |
self.protocol_instance.sendMessage(msg, True) |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
71 |
return 0 |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
72 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
73 |
class HMIProtocol(WebSocketServerProtocol): |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
74 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
75 |
def __init__(self, *args, **kwargs): |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
76 |
self._hmi_session = None |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
77 |
WebSocketServerProtocol.__init__(self, *args, **kwargs) |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
78 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
79 |
def onOpen(self): |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
80 |
assert(self._hmi_session is None) |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
81 |
self._hmi_session = HMISession(self) |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
82 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
83 |
def onClose(self, wasClean, code, reason): |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
84 |
self._hmi_session = None |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
85 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
86 |
def onMessage(self, msg, isBinary): |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
87 |
assert(self._hmi_session is not None) |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
88 |
self._hmi_session.onMessage(msg) |
2775
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
89 |
|
2779
75c6a31caca6
SVGHMI: Work In Progress : fixed pointer types in ctypes interface, cleaned up server startup and cleanup code, changed document type to XHTML, cleaner JS script : encapsulated in a function and in CDATA.
Edouard Tisserant
parents:
2777
diff
changeset
|
90 |
class HMIWebSocketServerFactory(WebSocketServerFactory): |
75c6a31caca6
SVGHMI: Work In Progress : fixed pointer types in ctypes interface, cleaned up server startup and cleanup code, changed document type to XHTML, cleaner JS script : encapsulated in a function and in CDATA.
Edouard Tisserant
parents:
2777
diff
changeset
|
91 |
protocol = HMIProtocol |
75c6a31caca6
SVGHMI: Work In Progress : fixed pointer types in ctypes interface, cleaned up server startup and cleanup code, changed document type to XHTML, cleaner JS script : encapsulated in a function and in CDATA.
Edouard Tisserant
parents:
2777
diff
changeset
|
92 |
|
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
93 |
svghmi_root = None |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
94 |
svghmi_listener = None |
2775
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
95 |
svghmi_send_thread = None |
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
96 |
|
2776
246ae685ab65
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2775
diff
changeset
|
97 |
def SendThreadProc(): |
246ae685ab65
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2775
diff
changeset
|
98 |
global svghmi_session |
246ae685ab65
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2775
diff
changeset
|
99 |
size = ctypes.c_uint32() |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
100 |
ptr = ctypes.c_void_p() |
2776
246ae685ab65
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2775
diff
changeset
|
101 |
res = 0 |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
102 |
while True: |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
103 |
res=svghmi_send_collect(ctypes.byref(size), ctypes.byref(ptr)) |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
104 |
if res == 0: |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
105 |
# TODO multiclient : dispatch to sessions |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
106 |
if svghmi_session is not None: |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
107 |
svghmi_session.sendMessage(ctypes.string_at(ptr.value,size.value)) |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
108 |
elif res not in [errno.EAGAIN, errno.ENODATA]: |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
109 |
break |
2776
246ae685ab65
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2775
diff
changeset
|
110 |
|
246ae685ab65
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2775
diff
changeset
|
111 |
|
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
112 |
|
2779
75c6a31caca6
SVGHMI: Work In Progress : fixed pointer types in ctypes interface, cleaned up server startup and cleanup code, changed document type to XHTML, cleaner JS script : encapsulated in a function and in CDATA.
Edouard Tisserant
parents:
2777
diff
changeset
|
113 |
|
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
114 |
# Called by PLCObject at start |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
115 |
def _runtime_svghmi0_start(): |
2775
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
116 |
global svghmi_listener, svghmi_root, svghmi_send_thread |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
117 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
118 |
svghmi_root = Resource() |
2779
75c6a31caca6
SVGHMI: Work In Progress : fixed pointer types in ctypes interface, cleaned up server startup and cleanup code, changed document type to XHTML, cleaner JS script : encapsulated in a function and in CDATA.
Edouard Tisserant
parents:
2777
diff
changeset
|
119 |
svghmi_root.putChild("ws", WebSocketResource(HMIWebSocketServerFactory())) |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
120 |
|
2779
75c6a31caca6
SVGHMI: Work In Progress : fixed pointer types in ctypes interface, cleaned up server startup and cleanup code, changed document type to XHTML, cleaner JS script : encapsulated in a function and in CDATA.
Edouard Tisserant
parents:
2777
diff
changeset
|
121 |
svghmi_listener = reactor.listenTCP(8008, Site(svghmi_root)) |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
122 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
123 |
# start a thread that call the C part of SVGHMI |
2775
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
124 |
svghmi_send_thread = Thread(target=SendThreadProc, name="SVGHMI Send") |
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
125 |
svghmi_send_thread.start() |
2771
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
126 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
127 |
|
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
128 |
# Called by PLCObject at stop |
361366b891ca
WIP on svghmi, now builds and runs. HTTP serving + WS transport ready, missing actual data to transmit and thread to collect it.
Edouard Tisserant
parents:
diff
changeset
|
129 |
def _runtime_svghmi0_stop(): |
2799
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
130 |
global svghmi_listener, svghmi_root, svghmi_send_thread, svghmi_session |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
131 |
if svghmi_session is not None: |
f5da343b9b63
SVGHMI: Many fixes. Subscriptions to HMItree seems to be working, and dispatch function is called in JS with good data. Bidirectional communication now really working.
Edouard Tisserant
parents:
2798
diff
changeset
|
132 |
svghmi_session.close() |
2775
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
133 |
svghmi_root.delEntity("ws") |
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
134 |
svghmi_root = None |
2772 | 135 |
svghmi_listener.stopListening() |
2775
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
136 |
svghmi_listener = None |
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
137 |
# plc cleanup calls svghmi_(locstring)_cleanup and unlocks send thread |
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
138 |
svghmi_send_thread.join() |
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
139 |
svghmi_send_thread = None |
3b93409ba22c
SVGHMI: WIP for python<->C data exchange
Edouard Tisserant
parents:
2774
diff
changeset
|
140 |