-
Notifications
You must be signed in to change notification settings - Fork 95
Description
Hello,
I am working on a SCADA software using django : PyScada.
I want to use SSE to send real time data and historic data to connected clients.
The system get data from various variables from connected devices.
The client need to get real time data from a list of variable.
Sometime a client is not allowed to get data from every variable and the server can decide to send him the data or not.
My idea of architecture is a broadcast channel where every device send the data of the read variables.
I need to have a filter function for each client allowing the server to decide if it send the data or not (depending on the client rights).
I was thinking to adding a validation_function to sse_encode_event like this :
def sse_encode_event(event_type, data, event_id=None, escape=False, json_encode=False, validation_function=None):
if json_encode:
data = json.dumps(data, cls=DjangoJSONEncoder)
if escape:
event_type = build_id_escape(event_type)
data = build_id_escape(data)
if validation_function is not None and not validation_function(event_type, data, event_id):
return ""
out = "event: %s\n" % event_type
if event_id:
out += "id: %s\n" % event_id
if "\n" in data:
# Handle multi-line data
for line in data.split("\n"):
out += "data: %s\n" % line
out += "\n" # At the end pop an additional new line to cap off the data.
else:
out += "data: %s\n\n" % data
return out
And specify this function here and here.
The event function should pass this to the stream function in utils.
What do you think about this ? Do you have a better solution ?