99 lines
2.9 KiB
Python
99 lines
2.9 KiB
Python
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))
|