#include "simsbasic.h" UniException::UniException(const QString& msg) :_error_store(msg) { } QString UniException::content() const noexcept { return _error_store; } WsEntity::WsEntity() {} void WsEntity::resetTemplet(const QString& name) { this->_templet_name = name; } QString WsEntity::templetName() const { return this->_templet_name; } void WsEntity::resetID(uint64_t id) { this->_entity_id = id; } uint64_t WsEntity::entityID() const { return this->_entity_id; } void WsEntity::resetName(const QString& name) { this->_runtime_name = name; } QString WsEntity::name() const { return this->_runtime_name; } void WsEntity::append(std::shared_ptr ins) { if (this->_comps_list.contains(ins->name())) return; this->_comps_list[ins->name()] = ins; } void WsEntity::remove(const QString& component_type) { this->_comps_list.remove(component_type); } QList> WsEntity::components() const { return _comps_list.values(); } std::shared_ptr WsEntity::defaultNew() const { auto newx = std::make_shared(); newx->_entity_id = this->_entity_id; newx->_templet_name = this->_templet_name; newx->_runtime_name = this->_runtime_name; for (auto c : this->_comps_list) newx->append(c->defaultNew()); return newx; } #include QList WsEntity::inputTypes() const { QList types; for (auto c : this->_comps_list) types.append(c->inputTypes()); return types.toSet().toList(); } #include #include QList WsEntity::getEntryWithSignature(const WsRespondSignatureType& t) const { QList list; for(auto c : this->_comps_list) list.append(c->getEntryWithSignature(t)); return list; } QList WsEntity::getEntryWithInType(const QString& msg_type) const { QList list; for(auto c : this->_comps_list) list.append(c->getEntrysWithInType(msg_type)); return list; } void WsEntity::recoveryFrom(const QJsonObject& obj) { this->_entity_id = obj["entity_id"].toVariant().toULongLong(); this->_runtime_name = obj["entity_name"].toString(); this->_templet_name = obj["entity_templet"].toString(); auto array = obj["component_array"].toArray(); for (auto idx = 0; idx < array.size(); ++idx) { auto value = array.at(idx).toObject(); auto type = value["component_type"].toString(); auto compins = this->_comps_list[type]; if (!compins) throw new UniException(type + "类型插件不存在!"); compins->recoveryFrom(value); } } void WsEntity::saveTo(QJsonObject& obj) const { obj["entity_id"] = QJsonValue::fromVariant(QVariant::fromValue(this->_entity_id)); obj["entity_name"] = this->_runtime_name; obj["entity_templet"] = this->_templet_name; QJsonArray array; for (auto c : this->_comps_list) { QJsonObject comp_obj; comp_obj["component_type"] = c->name(); c->saveTo(comp_obj); array.append(comp_obj); } obj["component_array"] = array; }