def __init__(self, config=None): """ Sets up the dictionary of connected decoders and socket client object. Decoder dictionary is of the form: {data descriptor name: list of decoder objects registered for that data} Args: config (ConfigManager, default=None): Config manager with information on what types the message fields are. If None, defaults are used. """ if config == None: # Retrieve defaults for the configs config = config_manager.ConfigManager() self.__decoders = { key.name: [] for key in list(data_desc_type.DataDescType) } # Internal buffer for un distributed data self.__buf = b"" #Setup key framing self.key_frame = None try: tmp_frame = config.get("framing", "use_key") except: tmp_frame = "false" if (tmp_frame.lower() == "true"): self.key_frame = int(config.get("framing", "key_val"), 16) self.key_obj = config.get_type("key_val") self.len_obj = config.get_type("msg_len")
def main(argv=None): # Double check wx python version by checking first character is at least # 4 (wx version 4+ required) wx_version = int(wx.version()[0]) if wx_version < 4: sys.stderr.write( "wxPython version is %s, version 4 or above is required" % wx.version()) return -1 """ Command line options. """ args = get_args() if args is None: return -1 # Setup the configuration file config = config_manager.ConfigManager() if args.config_path is not None: config.set_configs(args.config_path) else: print("No Configuration File in options, using defaults") app = wx.App(False) # Initialize main frame factory factory = MainFrameFactory(args, config) # Setup main frame factory (This is where the back end classes are # initialized and registered to each other) factory.setup_pipeline() sleep(1) factory.client_socket.connect(args.addr, args.port) sleep(1) factory.client_socket.register_to_server(client_socket.GUI_TAG) app.MainLoop() factory.client_socket.disconnect()
(leftover_data, raw_msgs) = self.parse_into_raw_msgs_api(self.__buf) self.__buf = leftover_data for raw_msg in raw_msgs: (length, data_desc, msg) = self.parse_raw_msg_api(raw_msg) data_desc_key = data_desc_type.DataDescType(data_desc).name for d in self.__decoders[data_desc_key]: d.data_callback(msg) if __name__ == "__main__": # Unit testing config = config_manager.ConfigManager() config.set('types', 'msg_len', 'U16') dist = Distributor(config) header_1 = "\x00\x0E\x00\x00\x00\x04" length_1 = 14 desc_1 = 4 data_1 = "\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A" header_2 = "\x00\x0A\x00\x00\x00\x01" length_2 = 10 desc_2 = 1 data_2 = "\x41\x42\x43\x44\x45\x46" leftover_data = "\x00\x0F\x00\x00\x00\x02\xFF"
def test_distributor(): """ Tests the raw messages and leftover data for the distributor """ config = config_manager.ConfigManager() config.set("types", "msg_len", "U16") dist = Distributor(config) header_1 = b"\x00\x0E\x00\x00\x00\x04" length_1 = 14 desc_1 = 4 data_1 = b"\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A" header_2 = b"\x00\x0A\x00\x00\x00\x01" length_2 = 10 desc_2 = 1 data_2 = b"\x41\x42\x43\x44\x45\x46" leftover_data = b"\x00\x0F\x00\x00\x00\x02\xFF" data = header_1 + data_1 + header_2 + data_2 + leftover_data (test_leftover, raw_msgs) = dist.parse_into_raw_msgs_api(data) assert (test_leftover == leftover_data ), "expected leftover data to be %s, but found %s" % ( list(leftover_data), list(test_leftover), ) assert raw_msgs[0] == ( header_1 + data_1), "expected first raw_msg to be %s, but found %s" % ( list(header_1 + data_1), list(raw_msgs[0]), ) assert raw_msgs[1] == ( header_2 + data_2), "expected second raw_msg to be %s, but found %s" % ( list(header_2 + data_2), list(raw_msgs[1]), ) (test_len_1, test_desc_1, test_msg_1) = dist.parse_raw_msg_api(raw_msgs[0]) (test_len_2, test_desc_2, test_msg_2) = dist.parse_raw_msg_api(raw_msgs[1]) assert test_len_1 == length_1, "expected 1st length to be %d but found %d" % ( length_1, test_len_1, ) assert test_len_2 == length_2, "expected 2nd length to be %d but found %d" % ( length_2, test_len_2, ) assert test_desc_1 == desc_1, "expected 1st desc to be %d but found %d" % ( desc_1, test_desc_1, ) assert test_desc_2 == desc_2, "expected 2nd desc to be %d but found %d" % ( desc_2, test_desc_2, ) assert test_msg_1 == data_1, "expected 1st msg to be {} but found {}".format( list(data_1), list(test_msg_1), ) assert test_msg_2 == data_2, "expected 2nd msg to be {} but found {}".format( list(data_2), list(test_msg_2), )