# vManager: # connection and general node handling import verse as v # global variables node_handlers = {} # dictionary of node handlers {v.NODE_TYPE -> module} connected = 0 # connected to the server avatar = None # client node id session = None # active session pointer # callbacks def _cb_connect_accept(v_avatar, address, host_id): global connected, avatar, node_handlers connected = 1 avatar = v_avatar if len(node_handlers) > 0: mask = 0 for type in node_handlers: mask |= 1 << type v.send_node_list(mask) def _cb_connect_terminate(address, message): global connected connected = 0 def _cb_node_create(node_id, type, owner_id): global avatar, node_handlers if type in node_handlers: node_handlers[type]._node_create(node_id, owner_id == avatar) def _cb_node_destroy(node_id): global node_handlers for type in node_handlers: handler = node_handlers[type] if node_id in handler._node_list: handler._node_destroy(node_id) # public functions def connect(): global session v.callback_set(v.SEND_CONNECT_ACCEPT, _cb_connect_accept) v.callback_set(v.SEND_CONNECT_TERMINATE, _cb_connect_terminate) v.callback_set(v.SEND_NODE_CREATE, _cb_node_create) v.callback_set(v.SEND_NODE_DESTROY, _cb_node_destroy) session = v.send_connect("uname", "pass", "localhost", 0) v.session_set(session) def callback_update(): v.callback_update(100); def set_handler(handler): global node_handlers handler._callbacks_set() node_handlers[handler._type] = handler def terminate(): global node_handlers, connected, avatar, session v.send_connect_terminate("localhost", "adios!") for i in range(0, 5): update() v.session_destroy(session) node_handlers = {} connected = 0 avatar = None session = None