Clean repo

This commit is contained in:
wqy
2022-09-15 22:56:32 +08:00
parent a66cdf9654
commit 592826b0f4
11 changed files with 314 additions and 469 deletions

View File

@@ -1,98 +1,170 @@
import ctypes
import api
max_name_len = 32
server = ctypes.windll.LoadLibrary("./TJNetworkServer.dll")
############################################################
# ChangeSet
############################################################
class LinkNodes:
def __init__(self, from_node, to_node):
self.from_node = from_node
self.to_node = to_node
ChangeSet = api.ChangeSet
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
############################################################
# enum
############################################################
def c_str(value):
return ctypes.c_char_p(value.encode())
JUNCTION = api.JUNCTION
RESERVOIR = api.RESERVOIR
TANK = api.TANK
PIPE = api.PIPE
PUMP = api.PUMP
VALVE = api.VALVE
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
############################################################
# project
############################################################
# create database
def create_project(name):
return server.TJ_createproject(c_str(name))
def have_project(name: str) -> bool:
return api.have_project(name)
# delete database
def delete_project(name):
return server.TJ_deleteproject(c_str(name))
def create_project(name: str) -> None:
return api.create_project(name)
# create runtime project and connect to database
def open_project(name):
return server.TJ_openproject(c_str(name))
def delete_project(name: str) -> None:
return api.delete_project(name)
# delete runtime project and disconnect from database
def close_project(name):
return server.TJ_closeproject(c_str(name))
def is_project_open(name: str) -> bool:
return api.is_project_open(name)
def undo(name):
return server.TJ_undo(c_str(name))
def open_project(name: str) -> None:
return api.open_project(name)
def redo(name):
return server.TJ_redo(c_str(name))
def close_project(name: str) -> None:
return api.close_project(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 copy_project(source: str, new: str) -> None:
return api.copy_project(source, new)
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))
############################################################
# operation
############################################################
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 undo(name: str) -> None:
return api.undo(name)
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 redo(name: str) -> None:
return api.redo(name)
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 have_snapshot(name: str, tag: str) -> bool:
return api.have_snapshot(name, tag)
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 take_snapshot(name: str, tag: str) -> None:
return api.take_snapshot(name, tag)
def delete_link(name, link_id):
return server.TJ_deletelink(c_str(name), c_str(link_id))
def pick_snapshot(name: str, tag: str) -> None:
return api.pick_snapshot(name, tag)
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 have_transaction(name: str) -> bool:
return api.have_transaction(name)
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))
def start_transaction(name: str, strict: bool = False) -> None:
return api.start_transaction(name, strict)
def commit_transaction(name: str) -> None:
return api.commit_transaction(name)
def abort_transaction(name: str) -> None:
return api.abort_transaction(name)
############################################################
# type
############################################################
def is_node(name: str, node_id: str) -> bool:
return api.is_node(name, node_id)
def is_junction(name: str, node_id: str) -> bool:
return api.is_junction(name, node_id)
def is_reservoir(name: str, node_id: str) -> bool:
return api.is_reservoir(name, node_id)
def is_tank(name: str, node_id: str) -> bool:
return api.is_tank(name, node_id)
def is_link(name: str, link_id: str) -> bool:
return api.is_link(name, link_id)
def is_pipe(name: str, link_id: str) -> bool:
return api.is_pipe(name, link_id)
def is_pump(name: str, link_id: str) -> bool:
return api.is_pump(name, link_id)
def is_valve(name: str, link_id: str) -> bool:
return api.is_valve(name, link_id)
def is_curve(name: str, curve_id: str) -> bool:
return api.is_curve(name, curve_id)
def is_pattern(name: str, pattern_id: str) -> bool:
return api.is_pattern(name, pattern_id)
def get_nodes(name: str) -> list[str]:
return api.get_nodes(name)
def get_links(name: str) -> list[str]:
return api.get_links(name)
def get_curves(name: str) -> list[str]:
return api.get_curves(name)
def get_patterns(name: str) -> list[str]:
return api.get_patterns(name)
############################################################
# title 1.[TITLE]
############################################################
def set_title(name: str, title: str) -> ChangeSet:
return api.set_title(name, title)
def get_title(name: str) -> str:
return api.get_title(name)
############################################################
# junction 2.[JUNCTIONS]
############################################################
def add_junction(name: str, junction_id: str, x: float, y: float, elevation: float) -> ChangeSet:
return api.add_junction(name, junction_id, x, y, elevation)
def delete_junction(name: str, junction_id: str) -> ChangeSet:
return api.delete_junction(name, junction_id)
def get_junction_elevation(name: str, junction_id: str) -> float | None:
return api.get_junction_elevation(name, junction_id)
def get_junction_demand(name: str, junction_id: str) -> float | str | None:
return api.get_junction_demand(name, junction_id)
def get_junction_pattern(name: str, junction_id: str) -> str | None:
return api.get_junction_pattern(name, junction_id)
def get_junction_coord(name: str, junction_id: str) -> dict[str, float] | None:
return api.get_junction_coord(name, junction_id)
def set_junction_elevation(name: str, junction_id: str, elevation: float) -> ChangeSet:
return api.set_junction_elevation(name, junction_id, elevation)
def set_junction_demand(name: str, junction_id: str, demand: float) -> ChangeSet:
return api.set_junction_demand(name, junction_id, demand)
def set_junction_pattern(name: str, junction_id: str, pattern: str) -> ChangeSet:
return api.set_junction_pattern(name, junction_id, pattern)
def set_junction_coord(name: str, junction_id: str, x: float, y: float) -> ChangeSet:
return api.set_junction_coord(name, junction_id, x, y)