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