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