GameActionResult::Ptr Execute() const override { rct_banner* banner = &gBanners[_bannerIndex]; utf8 *buffer = gCommonStringFormatBuffer; utf8 *dst = buffer; dst = utf8_write_codepoint(dst, FORMAT_COLOUR_CODE_START + banner->text_colour); String::Set(dst, sizeof(gCommonStringFormatBuffer) - (dst - buffer), _name.c_str(), _name.size()); rct_string_id string_id = user_string_allocate(USER_STRING_DUPLICATION_PERMITTED, buffer); if (string_id == 0) { return MakeResult(GA_ERROR::NO_FREE_ELEMENTS, STR_ERR_CANT_SET_BANNER_TEXT); } rct_string_id prev_string_id = banner->string_idx; banner->string_idx = string_id; user_string_free(prev_string_id); auto intent = Intent(INTENT_ACTION_UPDATE_BANNER); intent.putExtra(INTENT_EXTRA_BANNER_INDEX, _bannerIndex); context_broadcast_intent(&intent); return MakeResult(); }
ResultVal<std::shared_ptr<ServerSession>> ServerPort::Accept() { if (pending_sessions.empty()) { return ERR_NO_PENDING_SESSIONS; } auto session = std::move(pending_sessions.back()); pending_sessions.pop_back(); return MakeResult(std::move(session)); }
ResultVal<std::shared_ptr<Kernel::ClientPort>> ServiceManager::GetServicePort( const std::string& name) { CASCADE_CODE(ValidateServiceName(name)); auto it = registered_services.find(name); if (it == registered_services.end()) { return ERR_SERVICE_NOT_REGISTERED; } return MakeResult(it->second); }
GameActionResult::Ptr Query() const override { if (_bannerIndex >= MAX_BANNERS || _bannerIndex < 0) { log_warning("Invalid game command for setting banner name, banner id = %d", _bannerIndex); return MakeResult(GA_ERROR::INVALID_PARAMETERS, STR_NONE); } // Ensure user string space. rct_string_id string_id = user_string_allocate(USER_STRING_DUPLICATION_PERMITTED, _name.c_str()); if (string_id != 0) { user_string_free(string_id); } else { return MakeResult(GA_ERROR::NO_FREE_ELEMENTS, STR_ERR_CANT_SET_BANNER_TEXT); } return MakeResult(); }
ResultVal<std::shared_ptr<Kernel::ServerPort>> ServiceManager::RegisterService( std::string name, unsigned int max_sessions) { CASCADE_CODE(ValidateServiceName(name)); if (registered_services.find(name) != registered_services.end()) return ERR_ALREADY_REGISTERED; auto [server_port, client_port] = system.Kernel().CreatePortPair(max_sessions, name); registered_services.emplace(std::move(name), std::move(client_port)); return MakeResult(std::move(server_port)); }