void AtomWriter::delta(const Raul::URI& uri, const Resource::Properties& remove, const Resource::Properties& add) { LV2_Atom_Forge_Frame msg; forge_request(&msg, _uris.patch_Patch); lv2_atom_forge_key(&_forge, _uris.patch_subject); forge_uri(uri); lv2_atom_forge_key(&_forge, _uris.patch_remove); LV2_Atom_Forge_Frame remove_obj; lv2_atom_forge_object(&_forge, &remove_obj, 0, 0); forge_properties(remove); lv2_atom_forge_pop(&_forge, &remove_obj); lv2_atom_forge_key(&_forge, _uris.patch_add); LV2_Atom_Forge_Frame add_obj; lv2_atom_forge_object(&_forge, &add_obj, 0, 0); forge_properties(add); lv2_atom_forge_pop(&_forge, &add_obj); lv2_atom_forge_pop(&_forge, &msg); finish_msg(); }
void AtomWriter::get(const Raul::URI& uri) { LV2_Atom_Forge_Frame msg; forge_request(&msg, _uris.patch_Get); lv2_atom_forge_key(&_forge, _uris.patch_subject); forge_uri(uri); lv2_atom_forge_pop(&_forge, &msg); finish_msg(); }
void AtomWriter::disconnect(const Raul::Path& tail, const Raul::Path& head) { LV2_Atom_Forge_Frame msg; forge_request(&msg, _uris.patch_Delete); lv2_atom_forge_key(&_forge, _uris.patch_body); forge_arc(tail, head); lv2_atom_forge_pop(&_forge, &msg); finish_msg(); }
void AtomWriter::connect(const Raul::Path& tail, const Raul::Path& head) { LV2_Atom_Forge_Frame msg; forge_request(&msg, _uris.patch_Put); lv2_atom_forge_key(&_forge, _uris.patch_subject); forge_uri(Node::path_to_uri(Raul::Path::lca(tail, head))); lv2_atom_forge_key(&_forge, _uris.patch_body); forge_arc(tail, head); lv2_atom_forge_pop(&_forge, &msg); finish_msg(); }
void AtomWriter::move(const Raul::Path& old_path, const Raul::Path& new_path) { LV2_Atom_Forge_Frame msg; forge_request(&msg, _uris.patch_Move); lv2_atom_forge_key(&_forge, _uris.patch_subject); forge_uri(Node::path_to_uri(old_path)); lv2_atom_forge_key(&_forge, _uris.patch_destination); forge_uri(Node::path_to_uri(new_path)); lv2_atom_forge_pop(&_forge, &msg); finish_msg(); }
void AtomWriter::set_property(const Raul::URI& subject, const Raul::URI& predicate, const Atom& value) { LV2_Atom_Forge_Frame msg; forge_request(&msg, _uris.patch_Set); lv2_atom_forge_key(&_forge, _uris.patch_subject); forge_uri(subject); lv2_atom_forge_key(&_forge, _uris.patch_property); lv2_atom_forge_urid(&_forge, _map.map_uri(predicate.c_str())); lv2_atom_forge_key(&_forge, _uris.patch_value); lv2_atom_forge_atom(&_forge, value.size(), value.type()); lv2_atom_forge_write(&_forge, value.get_body(), value.size()); lv2_atom_forge_pop(&_forge, &msg); finish_msg(); }
void AtomWriter::put(const Raul::URI& uri, const Resource::Properties& properties, Resource::Graph ctx) { LV2_Atom_Forge_Frame msg; forge_request(&msg, _uris.patch_Put); lv2_atom_forge_key(&_forge, _uris.patch_subject); forge_uri(uri); lv2_atom_forge_key(&_forge, _uris.patch_body); LV2_Atom_Forge_Frame body; lv2_atom_forge_object(&_forge, &body, 0, 0); forge_properties(properties); lv2_atom_forge_pop(&_forge, &body); lv2_atom_forge_pop(&_forge, &msg); finish_msg(); }
void AtomWriter::response(int32_t id, Status status, const std::string& subject) { if (!id) { return; } LV2_Atom_Forge_Frame msg; forge_request(&msg, _uris.patch_Response); lv2_atom_forge_key(&_forge, _uris.patch_request); lv2_atom_forge_int(&_forge, id); if (!subject.empty() && Raul::URI::is_valid(subject)) { lv2_atom_forge_key(&_forge, _uris.patch_subject); lv2_atom_forge_uri(&_forge, subject.c_str(), subject.length()); } lv2_atom_forge_key(&_forge, _uris.patch_body); lv2_atom_forge_int(&_forge, static_cast<int>(status)); lv2_atom_forge_pop(&_forge, &msg); finish_msg(); }
void AtomWriter::disconnect_all(const Raul::Path& graph, const Raul::Path& path) { LV2_Atom_Forge_Frame msg; forge_request(&msg, _uris.patch_Delete); lv2_atom_forge_key(&_forge, _uris.patch_subject); forge_uri(Node::path_to_uri(graph)); lv2_atom_forge_key(&_forge, _uris.patch_body); LV2_Atom_Forge_Frame arc; lv2_atom_forge_object(&_forge, &arc, 0, _uris.ingen_Arc); lv2_atom_forge_key(&_forge, _uris.ingen_incidentTo); forge_uri(Node::path_to_uri(path)); lv2_atom_forge_pop(&_forge, &arc); lv2_atom_forge_pop(&_forge, &msg); finish_msg(); }
/* * Server has asked us to make a choice. * * Ask AI and return result. */ static void handle_choose(char *ptr) { player *p_ptr; char msg[1024]; int pos, type, num, num_special; int list[MAX_DECK], special[MAX_DECK]; int arg1, arg2, arg3; int i; /* Get player pointer */ p_ptr = &real_game.p[player_us]; /* Read choice log position expected */ pos = get_integer(&ptr); /* Check for further along in log than we are */ if (pos > p_ptr->choice_pos) { /* Adjust current position */ p_ptr->choice_size = p_ptr->choice_pos = pos; } /* Check for request for choice we have already made */ else if (pos < p_ptr->choice_pos) { /* XXX Do nothing */ return; } /* Read choice type */ type = get_integer(&ptr); /* Read number of items in list */ num = get_integer(&ptr); /* Loop over items in list */ for (i = 0; i < num; i++) { /* Read list item */ list[i] = get_integer(&ptr); } /* Read number of special items in list */ num_special = get_integer(&ptr); /* Loop over special items */ for (i = 0; i < num_special; i++) { /* Read special item */ special[i] = get_integer(&ptr); } /* Read extra arguments */ arg1 = get_integer(&ptr); arg2 = get_integer(&ptr); arg3 = get_integer(&ptr); /* Ask AI for decision */ ai_func.make_choice(&real_game, player_us, type, list, &num, special, &num_special, arg1, arg2, arg3); /* Start reply */ ptr = msg; /* Begin message */ start_msg(&ptr, MSG_CHOOSE); /* Put choice log position */ put_integer(p_ptr->choice_pos, &ptr); /* Copy entries from choice log */ for (i = p_ptr->choice_pos; i < p_ptr->choice_size; i++) { /* Copy entry */ put_integer(p_ptr->choice_log[i], &ptr); } /* Move current position to end of choice log */ p_ptr->choice_pos = p_ptr->choice_size; /* Finish message */ finish_msg(msg, ptr); /* Send reply */ send_msg(0, msg); }