import ctypes max_name_len = 32 server = ctypes.windll.LoadLibrary("./TJNetworkServer.dll") class LinkNodes: def __init__(self, from_node, to_node): self.from_node = from_node self.to_node = to_node class Point: def __init__(self, x, y): self.x = x self.y = y class Result: def __init__(self, ec, v): self.error_code = ec self.value = v def c_str(value): return ctypes.c_char_p(value.encode()) def c_ref(value): return ctypes.byref(value) # have database def have_project(name): yes = 406 ec = server.TJ_haveproject(c_str(name)) return True if ec == yes else False # create database def create_project(name): return server.TJ_createproject(c_str(name)) # delete database def delete_project(name): return server.TJ_deleteproject(c_str(name)) # create runtime project and connect to database def open_project(name): return server.TJ_openproject(c_str(name)) # delete runtime project and disconnect from database def close_project(name): return server.TJ_closeproject(c_str(name)) def undo(name): return server.TJ_undo(c_str(name)) def redo(name): return server.TJ_redo(c_str(name)) def get_count(name, object_type): count = ctypes.c_int() ec = server.TJ_getcount(c_str(name), object_type, c_ref(count)) return Result(ec, count.value) def add_node(name, node_id, node_type): return server.TJ_addnode(c_str(name), c_str(node_id), node_type) def delete_node(name, node_id): return server.TJ_deletenode(c_str(name), c_str(node_id)) def get_node_id(name, node_index): id = ctypes.create_string_buffer(max_name_len) ec = server.TJ_getnodeid(c_str(name), node_index, c_ref(id)) return Result(ec, id.value) def get_node_coord(name, node_id): x = ctypes.c_double() y = ctypes.c_double() ec = server.TJ_getnodecoord(c_str(name), c_str(node_id), c_ref(x), c_ref(y)) return Result(ec, Point(x.value, y.value)) def set_node_coord(name, node_id, x, y): func = server.TJ_setnodecoord func.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_double, ctypes.c_double] return func(c_str(name), c_str(node_id), x, y) def add_link(name, link_id, link_type, from_node, to_node): return server.TJ_addlink(c_str(name), c_str(link_id), link_type, c_str(from_node), c_str(to_node)) def delete_link(name, link_id): return server.TJ_deletelink(c_str(name), c_str(link_id)) def get_link_id(name, link_index): id = ctypes.create_string_buffer(max_name_len) ec = server.TJ_getlinkid(c_str(name), link_index, c_ref(id)) return Result(ec, id.value) def get_link_nodes(name, link_id): from_node = ctypes.create_string_buffer(max_name_len) to_node = ctypes.create_string_buffer(max_name_len) ec = server.TJ_getlinknodes(c_str(name), c_str(link_id), c_ref(from_node), c_ref(to_node)) return Result(ec, LinkNodes(from_node.value, to_node.value))