JMOT.connect
1import socket, json, sys, JMOT, logging 2 3def _verify(response): 4 ''' 5 verify the response from server 6 ''' 7 if response[0]: 8 pass 9 else: 10 print("send error") 11 12with open(r"JMOT\connect.json", 'r') as f: 13 connect_info = json.load(f) 14 SERVER_IP = connect_info["SERVER_IP"] 15 SERVER_DATA_PORT = connect_info["SERVER_DATA_PORT"] 16 SERVER_STREAM_PORT = connect_info["SERVER_LIST_PORT"] 17 SERVER_BUFFER = connect_info["SERVER_BUFFER"] 18 f.close() 19 20logging.basicConfig(filename=r'JMOT\log\tran.log', level=logging.INFO, format='%(asctime)s %(message)s') 21 22def _send_message_with_length(sock, message): 23 message_bytes = message.encode('utf-8') 24 sock.sendall(message_bytes) 25 26def _receive_message_with_length(sock): 27 message_bytes = sock.recv(SERVER_BUFFER) 28 if not message_bytes: 29 return None 30 return message_bytes.decode('utf-8') 31 32 33def _convert_value(item): 34 ''' 35 Convert the string item to the appropriate type (boolean, 3D vector, float, or string) 36 ''' 37 s = item.strip() 38 # Attempt to convert to boolean 39 if s.lower() == "true": 40 return True 41 if s.lower() == "false": 42 return False 43 44 # Attempt to convert to a 3D vector (a, b, c) 45 if s.startswith("(") and s.endswith(")"): 46 inner = s[1:-1] 47 parts = inner.split(',') 48 if len(parts) == 3: 49 try: 50 return (float(parts[0].strip()), float(parts[1].strip()), float(parts[2].strip())) 51 except ValueError: 52 pass 53 54 # Attempt to convert to a floating point number 55 try: 56 return float(s) 57 except ValueError: 58 pass 59 60 # Return the original string if no conversion applies 61 return s 62 63def _parse_message_to_list(message): 64 ''' Split the message by "<<" delimiter, trim and convert the type of each item''' 65 items = message.split("<<") 66 return [_convert_value(item) for item in items if item.strip()] 67 68def data_connect(): 69 ''' 70 JMOT data connect from Juno New Origin 71 ''' 72 try: 73 print("JMOT connecting...") 74 global client_socket 75 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 76 client_socket.connect((SERVER_IP, SERVER_DATA_PORT)) 77 version = _send_message("version", client_socket)[0] 78 if version != JMOT.__version__: 79 print("version error, please updates") 80 sys.exit(1) 81 else: 82 print(f"JMOT v{JMOT.__version__} connect successful") 83 return client_socket 84 except Exception as e: 85 print(f"Error occurred: {e}") 86 87def _send_message(message:str, socket = None): 88 ''' 89 send message to server and receive response 90 ''' 91 if socket is None: 92 socket = client_socket 93 try: 94 _send_message_with_length(socket, message) 95 logging.info(f'<- {message}') 96 response = _receive_message_with_length(socket) 97 if response is None or not _convert_value(response): 98 logging.info("Send Failed") 99 print("Send Failed") 100 else: 101 data = _parse_message_to_list(response) 102 logging.info(f'-> {data}') 103 return data 104 105 except Exception as e: 106 print(f"Error occurred: {e}")
def
data_connect():
69def data_connect(): 70 ''' 71 JMOT data connect from Juno New Origin 72 ''' 73 try: 74 print("JMOT connecting...") 75 global client_socket 76 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 77 client_socket.connect((SERVER_IP, SERVER_DATA_PORT)) 78 version = _send_message("version", client_socket)[0] 79 if version != JMOT.__version__: 80 print("version error, please updates") 81 sys.exit(1) 82 else: 83 print(f"JMOT v{JMOT.__version__} connect successful") 84 return client_socket 85 except Exception as e: 86 print(f"Error occurred: {e}")
JMOT data connect from Juno New Origin