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