[DEBUG] correct future time-out and remove remote object
This commit is contained in:
parent
4b961dbc84
commit
7f1883dbea
@ -57,6 +57,7 @@ void installPath(zeus::service::ProxyPicture& _srv, std::string _path, uint32_t
|
|||||||
APPL_ERROR("Get media ID = 0 With no error");
|
APPL_ERROR("Get media ID = 0 With no error");
|
||||||
}
|
}
|
||||||
if (_albumID != 0) {
|
if (_albumID != 0) {
|
||||||
|
APPL_INFO("Add media '" << mediaId << "'in ALbum: " << _albumID);
|
||||||
_srv.albumMediaAdd(_albumID, mediaId).wait();
|
_srv.albumMediaAdd(_albumID, mediaId).wait();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -447,6 +447,7 @@ static void load_db() {
|
|||||||
ejson::Object fileElement = itArray.toObject();
|
ejson::Object fileElement = itArray.toObject();
|
||||||
FileProperty property;
|
FileProperty property;
|
||||||
property.m_id = fileElement["id"].toNumber().getU64();
|
property.m_id = fileElement["id"].toNumber().getU64();
|
||||||
|
APPL_INFO("get ID : " << property.m_id);
|
||||||
property.m_fileName = fileElement["file-name"].toString().get();
|
property.m_fileName = fileElement["file-name"].toString().get();
|
||||||
property.m_name = fileElement["name"].toString().get();
|
property.m_name = fileElement["name"].toString().get();
|
||||||
property.m_mineType = fileElement["mine-type"].toString().get();
|
property.m_mineType = fileElement["mine-type"].toString().get();
|
||||||
@ -476,8 +477,8 @@ static void load_db() {
|
|||||||
album.m_parentId = albumElement["parent"].toNumber().getU64();
|
album.m_parentId = albumElement["parent"].toNumber().getU64();
|
||||||
album.m_name = albumElement["name"].toString().get();
|
album.m_name = albumElement["name"].toString().get();
|
||||||
album.m_description = albumElement["desc"].toString().get();
|
album.m_description = albumElement["desc"].toString().get();
|
||||||
ejson::Array listMadiaArray = database["list-album"].toArray();
|
ejson::Array listMadiaArray = albumElement["media"].toArray();
|
||||||
for (const auto itArrayMedia: listAlbumArray) {
|
for (const auto itArrayMedia: listMadiaArray) {
|
||||||
uint64_t tmp = itArrayMedia.toNumber().getU64();
|
uint64_t tmp = itArrayMedia.toNumber().getU64();
|
||||||
album.m_listMedia.push_back(tmp);
|
album.m_listMedia.push_back(tmp);
|
||||||
}
|
}
|
||||||
|
@ -92,16 +92,17 @@ void zeus::Client::onClientData(ememory::SharedPtr<zeus::Message> _value) {
|
|||||||
return;
|
return;
|
||||||
} else if (callFunction == "unlink") {
|
} else if (callFunction == "unlink") {
|
||||||
uint32_t objectAddress = callObj->getParameter<uint32_t>(0);
|
uint32_t objectAddress = callObj->getParameter<uint32_t>(0);
|
||||||
|
ZEUS_VERBOSE("unlink requested of " << (objectAddress>>16) << "/" << (objectAddress&0xFFFF) << " local interface adress : " << m_interfaceWeb->getAddress());
|
||||||
if ((objectAddress>> 16) != m_interfaceWeb->getAddress()) {
|
if ((objectAddress>> 16) != m_interfaceWeb->getAddress()) {
|
||||||
m_interfaceWeb->answerError(transactionId, _value->getDestination(), _value->getSource(), "REMOVE-OWNERSHIP-WRONG-INTERFACE");
|
m_interfaceWeb->answerError(transactionId, _value->getDestination(), _value->getSource(), "REMOVE-OWNERSHIP-WRONG-INTERFACE");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bool ret = m_interfaceWeb->remoteObjectOwnership(objectAddress&0xFFFF, _value->getSource());
|
bool ret = m_interfaceWeb->removeObjectOwnership(objectAddress&0xFFFF, _value->getSource());
|
||||||
if (ret == true) {
|
if (ret == true) {
|
||||||
m_interfaceWeb->answerVoid(transactionId, _value->getDestination(), _value->getSource());
|
m_interfaceWeb->answerVoid(transactionId, _value->getDestination(), _value->getSource());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_interfaceWeb->answerError(transactionId, _value->getDestination(), _value->getSource(), "REMOVE-OWNERSHIP-ERROR");
|
m_interfaceWeb->answerError(transactionId, _value->getDestination(), _value->getSource(), "REMOVE-OWNERSHIP-ERROR", "the object does not exist ...");
|
||||||
return;
|
return;
|
||||||
} else if (callFunction == "movelink") {
|
} else if (callFunction == "movelink") {
|
||||||
uint32_t objectAddress = callObj->getParameter<uint32_t>(0);
|
uint32_t objectAddress = callObj->getParameter<uint32_t>(0);
|
||||||
@ -110,7 +111,7 @@ void zeus::Client::onClientData(ememory::SharedPtr<zeus::Message> _value) {
|
|||||||
m_interfaceWeb->answerError(transactionId, _value->getDestination(), _value->getSource(), "TRANSFER-OWNERSHIP-WRONG-INTERFACE");
|
m_interfaceWeb->answerError(transactionId, _value->getDestination(), _value->getSource(), "TRANSFER-OWNERSHIP-WRONG-INTERFACE");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bool ret = m_interfaceWeb->transferRemoteObjectOwnership(objectAddress&0xFFFF, _value->getSource(), destinataireAddress);
|
bool ret = m_interfaceWeb->transferRemoteObjectOwnership(objectAddress, _value->getSource(), destinataireAddress);
|
||||||
if (ret == true) {
|
if (ret == true) {
|
||||||
m_interfaceWeb->answerVoid(transactionId, _value->getDestination(), _value->getSource());
|
m_interfaceWeb->answerVoid(transactionId, _value->getDestination(), _value->getSource());
|
||||||
return;
|
return;
|
||||||
|
@ -31,6 +31,7 @@ zeus::ObjectRemoteBase::~ObjectRemoteBase() {
|
|||||||
zeus::Future<bool> ret = m_interfaceWeb->call(getFullId(), m_remoteAddress&0xFFFF0000, "unlink", m_remoteAddress);
|
zeus::Future<bool> ret = m_interfaceWeb->call(getFullId(), m_remoteAddress&0xFFFF0000, "unlink", m_remoteAddress);
|
||||||
ret.wait();
|
ret.wait();
|
||||||
if (ret.hasError() == true) {
|
if (ret.hasError() == true) {
|
||||||
|
ZEUS_WARNING("return call error: " << ret.getErrorType() << " help:" << ret.getErrorHelp());
|
||||||
ZEUS_WARNING("Can not unlink with the object id: " << (m_remoteAddress>>16) << "/" << (m_remoteAddress&0xFFFF) << " ==> link error");
|
ZEUS_WARNING("Can not unlink with the object id: " << (m_remoteAddress>>16) << "/" << (m_remoteAddress&0xFFFF) << " ==> link error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ void zeus::Promise::remoteObjectDestroyed() {
|
|||||||
answer->setTransactionId(m_transactionId);
|
answer->setTransactionId(m_transactionId);
|
||||||
answer->setSource(m_source);
|
answer->setSource(m_source);
|
||||||
answer->setDestination(0);
|
answer->setDestination(0);
|
||||||
|
answer->setPartFinish(true);
|
||||||
answer->addError("REMOTE-OBJECT-REMOVE", "The remote interface ot the Object has been destroyed");
|
answer->addError("REMOTE-OBJECT-REMOVE", "The remote interface ot the Object has been destroyed");
|
||||||
setMessage(answer);
|
setMessage(answer);
|
||||||
}
|
}
|
||||||
@ -180,7 +181,9 @@ void zeus::Promise::waitFor(echrono::Duration _delta) const {
|
|||||||
&& isFinished() == false) {
|
&& isFinished() == false) {
|
||||||
// TODO : Do it better ... like messaging/mutex_locked ...
|
// TODO : Do it better ... like messaging/mutex_locked ...
|
||||||
std::this_thread::sleep_for(echrono::milliseconds(10));
|
std::this_thread::sleep_for(echrono::milliseconds(10));
|
||||||
start = echrono::Steady::now();
|
}
|
||||||
|
if (isFinished() == false) {
|
||||||
|
ZEUS_WARNING("Wait timeout ...");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,5 +193,8 @@ void zeus::Promise::waitUntil(echrono::Steady _endTime) const {
|
|||||||
// TODO : Do it better ... like messaging/mutex_locked ...
|
// TODO : Do it better ... like messaging/mutex_locked ...
|
||||||
std::this_thread::sleep_for(echrono::milliseconds(10));
|
std::this_thread::sleep_for(echrono::milliseconds(10));
|
||||||
}
|
}
|
||||||
|
if (isFinished() == false) {
|
||||||
|
ZEUS_WARNING("Wait timeout ...");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,8 +50,10 @@ bool zeus::WebObj::removeOwnership(uint32_t _id) {
|
|||||||
for (auto it = m_listRemoteConnected.begin();
|
for (auto it = m_listRemoteConnected.begin();
|
||||||
it != m_listRemoteConnected.end();
|
it != m_listRemoteConnected.end();
|
||||||
) {
|
) {
|
||||||
|
ZEUS_VERBOSE(" check ID : " << (*it>>16) << "/" << (*it&0xFFFF) << " == " << (_id>>16) << "/" << (_id&0xFFFF));
|
||||||
if (*it == _id) {
|
if (*it == _id) {
|
||||||
it = m_listRemoteConnected.erase(it);
|
it = m_listRemoteConnected.erase(it);
|
||||||
|
ZEUS_VERBOSE(" REMOVE ...");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
++it;
|
++it;
|
||||||
@ -71,7 +73,9 @@ void zeus::WebObj::rmRemoteInterface(uint16_t _id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool zeus::WebObj::transferOwnership(uint32_t _sourceAddress, uint32_t _destinataireAddress) {
|
bool zeus::WebObj::transferOwnership(uint32_t _sourceAddress, uint32_t _destinataireAddress) {
|
||||||
|
ZEUS_VERBOSE(" transfer onership : " << (_sourceAddress>>16) << "/" << (_sourceAddress&0xFFFF) << " ==> " << (_destinataireAddress>>16) << "/" << (_destinataireAddress&0xFFFF));
|
||||||
for (auto &it : m_listRemoteConnected) {
|
for (auto &it : m_listRemoteConnected) {
|
||||||
|
//ZEUS_INFO(" " << (it>>16) << "/" << (it&0xFFFF));
|
||||||
if (it == _sourceAddress) {
|
if (it == _sourceAddress) {
|
||||||
it = _destinataireAddress;
|
it = _destinataireAddress;
|
||||||
return true;
|
return true;
|
||||||
|
@ -543,7 +543,7 @@ bool zeus::WebServer::transferRemoteObjectOwnership(uint16_t _objectAddress, uin
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool zeus::WebServer::remoteObjectOwnership(uint16_t _objectAddress, uint32_t _sourceAddress) {
|
bool zeus::WebServer::removeObjectOwnership(uint16_t _objectAddress, uint32_t _sourceAddress) {
|
||||||
if ( m_listObject.size() == 0
|
if ( m_listObject.size() == 0
|
||||||
&& m_listRemoteObject.size() == 0) {
|
&& m_listRemoteObject.size() == 0) {
|
||||||
return false;
|
return false;
|
||||||
@ -552,6 +552,7 @@ bool zeus::WebServer::remoteObjectOwnership(uint16_t _objectAddress, uint32_t _s
|
|||||||
if (it == nullptr) {
|
if (it == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
//ZEUS_INFO("1 Remove ownership of " << it->getObjectId() << " == " << _objectAddress);
|
||||||
if (it->getObjectId() == _objectAddress) {
|
if (it->getObjectId() == _objectAddress) {
|
||||||
return it->removeOwnership(_sourceAddress);
|
return it->removeOwnership(_sourceAddress);
|
||||||
}
|
}
|
||||||
@ -561,6 +562,7 @@ bool zeus::WebServer::remoteObjectOwnership(uint16_t _objectAddress, uint32_t _s
|
|||||||
if (tmp == nullptr) {
|
if (tmp == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
//ZEUS_INFO("2 Remove ownership of " << tmp->getObjectId() << " == " << _objectAddress);
|
||||||
if (tmp->getObjectId() == _objectAddress) {
|
if (tmp->getObjectId() == _objectAddress) {
|
||||||
ZEUS_ERROR("return a remote Object is not permited ... ==> link directly to the original elements");
|
ZEUS_ERROR("return a remote Object is not permited ... ==> link directly to the original elements");
|
||||||
return false;
|
return false;
|
||||||
|
@ -359,7 +359,7 @@ namespace zeus {
|
|||||||
// for debug only:
|
// for debug only:
|
||||||
void listObjects();
|
void listObjects();
|
||||||
bool transferRemoteObjectOwnership(uint16_t _objectAddress, uint32_t _sourceAddress, uint32_t _destinataireAddress);
|
bool transferRemoteObjectOwnership(uint16_t _objectAddress, uint32_t _sourceAddress, uint32_t _destinataireAddress);
|
||||||
bool remoteObjectOwnership(uint16_t _objectAddress, uint32_t _sourceAddress);
|
bool removeObjectOwnership(uint16_t _objectAddress, uint32_t _sourceAddress);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ ememory::SharedPtr<zeus::Message> zeus::Message::create(ememory::SharedPtr<zeus:
|
|||||||
ememory::SharedPtr<zeus::Message> zeus::Message::create(ememory::SharedPtr<zeus::WebServer> _iface, const std::vector<uint8_t>& _buffer) {
|
ememory::SharedPtr<zeus::Message> zeus::Message::create(ememory::SharedPtr<zeus::WebServer> _iface, const std::vector<uint8_t>& _buffer) {
|
||||||
zeus::message::headerBin header;
|
zeus::message::headerBin header;
|
||||||
if (_buffer.size() < sizeof(zeus::message::headerBin)) {
|
if (_buffer.size() < sizeof(zeus::message::headerBin)) {
|
||||||
ZEUS_ERROR("wrong size of the buffer");
|
ZEUS_ERROR("wrong size of the buffer: " << _buffer.size() << " must be " << sizeof(zeus::message::headerBin));
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
memcpy(reinterpret_cast<char*>(&header), &_buffer[0], sizeof(zeus::message::headerBin));
|
memcpy(reinterpret_cast<char*>(&header), &_buffer[0], sizeof(zeus::message::headerBin));
|
||||||
|
@ -1469,7 +1469,7 @@ namespace zeus {
|
|||||||
uint16_t id = iface->getAddress();
|
uint16_t id = iface->getAddress();
|
||||||
uint16_t idObj = iface->getNewObjectId();
|
uint16_t idObj = iface->getNewObjectId();
|
||||||
// Sent to the interface the change of links from the curent interface to the real object remote ... (the client interface can control that the user calle r is athorised to do it ...
|
// Sent to the interface the change of links from the curent interface to the real object remote ... (the client interface can control that the user calle r is athorised to do it ...
|
||||||
iface->call((uint32_t(id)<<16), objectAdress&0xFFFF0000, "movelink", objectAdress, (uint32_t(id)<<16)+idObj);
|
iface->call(getDestination(), objectAdress&0xFFFF0000, "movelink", objectAdress, (uint32_t(id)<<16)+idObj);
|
||||||
out = ememory::makeShared<zeus::ObjectRemoteBase>(iface, id, idObj, objectAdress, type.getName());
|
out = ememory::makeShared<zeus::ObjectRemoteBase>(iface, id, idObj, objectAdress, type.getName());
|
||||||
iface->addWebObjRemote(out);
|
iface->addWebObjRemote(out);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user