125 lines
2.9 KiB
C++
125 lines
2.9 KiB
C++
#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<WsComponent> 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<std::shared_ptr<WsComponent>> WsEntity::components() const {
|
||
return _comps_list.values();
|
||
}
|
||
|
||
std::shared_ptr<WsEntity> WsEntity::defaultNew() const {
|
||
auto newx = std::make_shared<WsEntity>();
|
||
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 <QSet>
|
||
QList<QString> WsEntity::inputTypes() const
|
||
{
|
||
QList<QString> types;
|
||
for (auto c : this->_comps_list)
|
||
types.append(c->inputTypes());
|
||
return types.toSet().toList();
|
||
}
|
||
|
||
#include <QVariant>
|
||
#include <QJsonArray>
|
||
QList<WsRespondEntry> WsEntity::getEntryWithSignature(const WsRespondSignatureType& t) const
|
||
{
|
||
QList<WsRespondEntry> list;
|
||
for(auto c : this->_comps_list)
|
||
list.append(c->getEntryWithSignature(t));
|
||
return list;
|
||
}
|
||
|
||
QList<WsRespondEntry> WsEntity::getEntryWithInType(const QString& msg_type) const
|
||
{
|
||
QList<WsRespondEntry> 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 + "<EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>");
|
||
|
||
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;
|
||
}
|