Skip to content

Commit c94ecb2

Browse files
author
Wasin Waeosri
committed
change log:
1. support multiple fragments 2. support ping pong message
1 parent d384c4a commit c94ecb2

File tree

1 file changed

+20
-15
lines changed

1 file changed

+20
-15
lines changed

mrn_prototype.py

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def send_mrn_request(ws):
4747
""" Create and send MRN request """
4848
mrn_req_json = {
4949
'ID': 2,
50-
'Domain': mrn_domain,
50+
"Domain": mrn_domain,
5151
'Key': {
5252
'Name': mrn_item
5353
}
@@ -84,31 +84,36 @@ def processUpdate(ws, message_json):
8484
guid = fields_data["GUID"]
8585
mrn_src = fields_data["MRN_SRC"]
8686

87-
print("GUID = %s" % guid)
88-
print("FRAG_NUM = %d" % frag_num)
89-
print("MRN_SRC = %s" % mrn_src)
87+
#print("GUID = %s" % guid)
88+
#print("FRAG_NUM = %d" % frag_num)
89+
#print("MRN_SRC = %s" % mrn_src)
9090

9191
#fragment_decoded = base64.b64decode(fragment)
9292
print("fragment length = %d" % len(fragment))
9393
if frag_num > 1: # We are now processing more than one part of an envelope - retrieve the current details
9494
guid_index = next((index for (index, d) in enumerate(
9595
_news_envelopes) if d["guid"] == guid), None)
9696
envelop = _news_envelopes[guid_index]
97-
if envelop:
97+
if envelop and envelop["data"]["mrn_src"] == mrn_src and frag_num == envelop["data"]["frag_num"] + 1:
9898
print("process multiple fragments for guid %s" %
9999
envelop["guid"])
100100
# print(envelop)
101101
#print("fragment before merge = %d" % len(envelop["data"]["fragment"]))
102102

103-
# Merge incoming fragment to current fragment
103+
# Merge incoming data to existing envelop
104104
envelop["data"]["fragment"] = envelop["data"]["fragment"] + fragment
105+
envelop["data"]["frag_num"] = frag_num
105106

106107
#print("TOT_SIZE from envelop = %d" % envelop["data"]["tot_size"])
107108
#print("fragment after merge = %d" % len(envelop["data"]["fragment"]))
108109
if envelop["data"]["tot_size"] == len(envelop["data"]["fragment"]):
109110
parseNewsData(envelop["data"]["fragment"])
110111
else:
111112
return None
113+
else:
114+
print("Error: Cannot find fragment for GUID %s with matching FRAG_NUM or MRN_SRC %s" % (
115+
guid, mrn_src))
116+
return None
112117
else: # FRAG_NUM:1 The first fragment
113118
tot_size = int(fields_data["TOT_SIZE"])
114119
print("TOT_SIZE = %d" % tot_size)
@@ -146,17 +151,17 @@ def processStatus(ws, message_json):
146151
def process_message(ws, message_json):
147152
""" Parse at high level and output JSON of message """
148153
message_type = message_json['Type']
149-
message_domain = message_json['Domain']
150154

151155
if message_type == "Refresh":
152-
if 'Domain' in message_json:
153-
#message_domain = message_json['Domain']
156+
if "Domain" in message_json:
157+
message_domain = message_json["Domain"]
154158
if message_domain == "Login":
155159
process_login_response(ws, message_json)
156-
elif message_domain == mrn_domain:
160+
elif message_domain:
157161
processRefresh(ws, message_json)
158-
elif message_type == "Update" and message_domain == mrn_domain:
159-
processUpdate(ws, message_json)
162+
elif message_type == "Update":
163+
if "Domain" in message_json and message_json["Domain"] == mrn_domain:
164+
processUpdate(ws, message_json)
160165
elif message_type == "Status":
161166
processStatus(ws, message_json)
162167
elif message_type == "Ping":
@@ -190,7 +195,7 @@ def send_login_request(ws):
190195
""" Generate a login request from command line data (or defaults) and send """
191196
login_json = {
192197
'ID': 1,
193-
'Domain': 'Login',
198+
"Domain": 'Login',
194199
'Key': {
195200
'Name': '',
196201
'Elements': {
@@ -214,9 +219,9 @@ def send_login_request(ws):
214219

215220
def on_message(ws, message):
216221
""" Called when message received, parse message into JSON for processing """
217-
#print("RECEIVED: ")
222+
print("RECEIVED: ")
218223
message_json = json.loads(message)
219-
#print(json.dumps(message_json, sort_keys=True, indent=2, separators=(',', ':')))
224+
print(json.dumps(message_json, sort_keys=True, indent=2, separators=(',', ':')))
220225

221226
for singleMsg in message_json:
222227
process_message(ws, singleMsg)

0 commit comments

Comments
 (0)