1
1
from threading import Thread
2
2
import logging
3
3
import time
4
- # import sys
5
4
import socket
6
5
import datetime
7
6
import firebase_admin
8
7
from firebase_admin import credentials
9
8
from firebase_admin import firestore
10
- #logging.basicConfig(filename='event_log.log',level=logging.DEBUG)
11
- messageList = []
12
- '''
13
- SEND MESSAGE:
14
- in_module
15
- in_method
16
- check_args
17
- send
18
- '''
19
- # import subprocess
9
+
10
+ class listen_class :
11
+ def __init__ (self , listenList ):
12
+ self .messageList = listenList
13
+
14
+ def get_list (self ):
15
+ return self .messageList
16
+
17
+ def reset_list (self ):
18
+ self .messageList = []
19
+
20
+ def start_listen (self ):
21
+ t1 = Thread (target = self .listen , args = ())
22
+ t1 .daemon = True
23
+ t1 .start ()
24
+
25
+ def listen_test (self ): # FOR TESTING
26
+ while True :
27
+ message = input ("What is your message?" )
28
+ self .messageList .append (message )
29
+ print (self .messageList )
30
+
31
+ def listen (self ):
32
+ UDP_IP = "127.0.0.1"
33
+ RX_PORT = 5557
34
+ while True :
35
+ msg_lstn = socket .socket (socket .AF_INET , socket .SOCK_DGRAM ) # UDP
36
+ msg_lstn .bind ((UDP_IP , RX_PORT ))
37
+ ack , addr = msg_lstn .recvfrom (1024 )
38
+ if "to SATT4" in str (ack ): #checks if message received was the one we just sent
39
+ print ("RX: " , end = "" )
40
+ print (ack )
41
+ self .messageList .append (ack )
42
+ timestamp = get_time ()
43
+ city_ref = db .collection (u'Log' ).document (u'Listen' )
44
+ city_ref .update ({
45
+ timestamp : ack ,
46
+ })
47
+ checksum = generate_checksum (ack )
48
+ time .sleep (1 )
20
49
cred = credentials .Certificate ("groundstation-listen-log-firebase-adminsdk-h2jfr-9d71ce0bdb.json" )
21
50
firebase_admin .initialize_app (cred )
22
-
23
51
db = firestore .client ()
52
+
24
53
tx_port = 5555
25
54
udp_ip = "127.0.0.1"
26
55
69
98
'_init_' : _init_
70
99
}
71
100
72
-
73
101
def get_time (): # get_time()
74
102
ts = time .time ()
75
103
st = datetime .datetime .fromtimestamp (ts ).strftime ('%Y-%m-%d %H:%M:%S' )
76
104
return (st )
77
105
78
-
79
- #def get_logger():
80
- #return (logging.getLogger("CI"))
81
-
82
-
83
106
def print_arg (list ):
84
107
string = ""
85
108
for arg in list :
86
109
string += str (arg ) + ","
87
110
return (string [:- 1 ])
88
111
89
-
90
112
def generate_checksum (body : str ):
91
113
"""
92
114
Given a message body, generate its checksum
@@ -97,190 +119,83 @@ def generate_checksum(body: str):
97
119
sum1 = sum ([ord (x ) for x in body [0 :- 7 ]])
98
120
sum1 %= 26
99
121
sum1 += 65
100
- #logger = get_logger()
101
- #logger.debug('CHECKOUT :' + chr(sum1) + ";")
102
122
return chr (sum1 )
103
123
104
124
def check_checksum (body : str ):
105
125
body2 = body [:- 1 ]
106
126
checksum = generate_checksum (body2 )
107
127
if (checksum == body [- 1 ]):
108
128
return True ;
109
- else : return False ;
110
- class listen_class :
111
- def __init__ (self , listenList ):
112
- self .messageList = listenList
113
- # self.messageList.append(messageList)
129
+ else :
130
+ return False ;
114
131
115
- def get_list (self ):
116
- return self .messageList
117
-
118
- def reset_list (self ):
119
- self .messageList = []
120
-
121
- def start_listen (self ):
122
- t1 = Thread (target = self .listen_test , args = ())
123
- t1 .daemon = True
124
- t1 .start ()
125
-
126
- def listen_test (self ): # FOR TESTING
127
- while True :
128
- message = input ("What is your message?" )
129
- self .messageList .append (message )
130
- print (self .messageList )
131
-
132
- def listen (self ):
133
- UDP_IP = "127.0.0.1"
134
- RX_PORT = 5557
135
- while True :
136
- msg_lstn = socket .socket (socket .AF_INET , socket .SOCK_DGRAM ) # UDP
137
- msg_lstn .bind ((UDP_IP , RX_PORT ))
138
- ack , addr = msg_lstn .recvfrom (1024 )
139
- #print (ack)
140
- #time.sleep(1)
141
- #REDUDANCY CHECK
142
- if "to SATT4" in str (ack ):
143
- # getTime()
144
- print ("RX: " , end = "" )
145
- print (ack )
146
- self .messageList .append (ack )
147
- timestamp = get_time ()
148
- city_ref = db .collection (u'Log' ).document (u'Listen' )
149
- city_ref .update ({
150
- timestamp : ack ,
151
- })
152
- checksum = generate_checksum (ack )
153
- time .sleep (1 )
154
- #self.messageList.append(ack)
155
- # return(str(ack))
156
- #print ("RX: " + get_time(), end="")
157
- #print (ack)
158
- # print(ack)
159
- # self.messageList.append(ack)
160
132
def in_module (module ):
161
- # get_time()
162
- # submod = input("UI: Which Module?\n")
163
- # while(submod not in submodules):
164
- # get_time()
165
- # submod = input("UI: Which Module?\n")
166
- # return(submod)
167
133
if (module in submodules ):
168
134
return True
169
135
return False
170
136
171
-
172
- def print_Methods (submodule ):
173
- methods = "<font color=green></br>"
174
- for i in submodules [submodule ].keys ():
175
- print (i )
176
- methods += i + "</br>"
177
- methods += "</font>"
178
- return (methods )
179
-
180
-
181
137
def in_method (submod , method ):
182
- '''method = input("UI: Which method?\n ")
183
- while(method not in submodules[submod]):
184
- get_time()
185
- method = input("UI: Which method?\n ")
186
- return(method)'''
187
138
if (method in submodules [submod ]):
188
139
return True
189
140
return False
190
141
191
-
192
142
def check_int (num ):
193
143
return (num .isdigit ())
194
144
195
-
196
145
def check_bool (booleanVar ):
197
- # takes in str
198
146
if (booleanVar == "True" or booleanVar == "False" ):
199
147
return (True )
200
148
return (False )
201
149
202
-
203
- # def send_message()
204
-
205
150
def check_float (floatVar ):
206
151
try :
207
152
float (floatVar )
208
153
return (True )
209
154
except ValueError :
210
155
return (False )
211
156
212
-
213
157
def check_char (charVal ):
214
158
if (charVal .isalpha () == True and len (charVal ) <= 1 ):
215
159
return (True )
216
160
return False
217
161
218
-
219
- def arg_length (module , method ):
220
- return (len (submodules [module ][method ]))
221
-
222
-
223
- def get_arg (module , method ):
224
- argStr = "<font color=green></br>Args: ["
225
- for i in (submodules [module ][method ]):
226
- argStr += i + ", "
227
- argStr += "]<font>"
228
- return (argStr )
229
-
230
-
231
162
def check_args (module , method , argList ):
232
163
argumentlist = submodules [module ][method ]
233
164
if (len (argumentlist ) != len (argList )):
234
165
return (False )
235
166
count = 0
236
167
for i in argumentlist :
237
- # print(count)
238
- # print(argList[count])
239
168
if (i == "int" ):
240
169
if (check_int (argList [count ]) == False ):
241
- # print("int")
242
170
return (False )
243
171
count += 1
244
172
elif (i == "bool" ):
245
173
if (check_bool (argList [count ]) == False ):
246
- # print("bool")
247
174
return (False )
248
175
count += 1
249
176
elif (i == "float" ):
250
177
if (check_float (argList [count ]) == False ):
251
- # print("float")
252
178
return (False )
253
179
count += 1
254
180
elif (i == "char" ):
255
181
if (check_char (argList [count ]) == False ):
256
- # print("char")
257
182
return (False )
258
183
count += 1
259
184
else :
260
185
count += 1
261
186
return (True )
262
187
263
-
264
- def get_message (module , method , argList ):
265
- checksum = generate_checksum (
266
- 'TJ' + module + ',' + method + ',' + print_arg (argList ))
267
- msg = "TJ" + module + "," + method + "," + print_arg (argList ) + checksum
268
- return (msg )
269
-
270
-
271
188
def send (module , method , argList ): # ASSUMES EVERYTHING HAS BEEN CHECKED
272
- log = open ("event_log.log" , "a" )
273
189
checksum = generate_checksum ('TJ' + module + ',' + method + ',' + print_arg (argList ))
274
190
msg = "TJ" + module + "," + method + "," + print_arg (argList ) + checksum
275
191
try : # Message successfully sent
276
192
msg_snd = socket .socket (socket .AF_INET , socket .SOCK_DGRAM )
277
193
msg_snd .sendto (msg .encode (), (udp_ip , tx_port ))
278
- city_ref = db .collection (u'Log' ).document (u'Send' )
194
+ city_ref = db .collection (u'Log' ).document (u'Send' )#
279
195
timestamp = get_time ()
280
- city_ref .update ({
281
- timestamp : msg ,
282
- })
196
+ city_ref .update ({#
197
+ timestamp : msg ,#
198
+ })#
283
199
return True
284
200
except :
285
- log .write ("ERROR: MESSAGE FAILED TO SEND. MESSAGE: " + msg )
286
201
return False
0 commit comments