mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 04:25:35 +08:00
refs #849, use timestamp with server to indicate when login started
* CServer -> ITimestampBased * added compare functions
This commit is contained in:
committed by
Mathew Sutcliffe
parent
5f18707c9c
commit
dcfaca431c
@@ -13,6 +13,7 @@
|
||||
#include "blackmisc/logcategorylist.h"
|
||||
#include "blackmisc/propertyindex.h"
|
||||
#include "blackmisc/statusmessage.h"
|
||||
#include "blackmisc/comparefunctions.h"
|
||||
#include "blackmisc/variant.h"
|
||||
|
||||
#include <Qt>
|
||||
@@ -28,12 +29,17 @@ namespace BlackMisc
|
||||
QString CServer::convertToQString(bool i18n) const
|
||||
{
|
||||
QString s(this->m_name);
|
||||
s.append(" ").append(this->m_description);
|
||||
s.append(" ").append(this->m_address);
|
||||
s.append(" ").append(QString::number(this->m_port));
|
||||
s.append(" ").append(this->m_user.toQString(i18n));
|
||||
s.append(" ").append(boolToYesNo(this->m_isAcceptingConnections));
|
||||
s.append(" ").append(this->m_fsdSetup.toQString(i18n));
|
||||
s.append(' ').append(this->m_description);
|
||||
s.append(' ').append(this->m_address);
|
||||
s.append(' ').append(QString::number(this->m_port));
|
||||
s.append(' ').append(this->m_user.toQString(i18n));
|
||||
s.append(' ').append(boolToYesNo(this->m_isAcceptingConnections));
|
||||
s.append(' ').append(this->m_fsdSetup.toQString(i18n));
|
||||
|
||||
if (this->isConnected())
|
||||
{
|
||||
s.append(" connected: ").append(this->getFormattedUtcTimestampHms());
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
@@ -65,6 +71,11 @@ namespace BlackMisc
|
||||
return m_port > 0 && !m_address.isEmpty();
|
||||
}
|
||||
|
||||
bool CServer::isConnected() const
|
||||
{
|
||||
return this->m_timestampMSecsSinceEpoch >= 0;
|
||||
}
|
||||
|
||||
CStatusMessageList CServer::validate() const
|
||||
{
|
||||
static const CLogCategoryList cats(CLogCategoryList(this).join({ CLogCategory::validation()}));
|
||||
@@ -79,10 +90,19 @@ namespace BlackMisc
|
||||
return msgs;
|
||||
}
|
||||
|
||||
QString CServer::getServerSessionId() const
|
||||
{
|
||||
if (!this->isConnected()) { return ""; }
|
||||
const QString session("%1 %2:%3 %4 %5");
|
||||
return session.arg(this->getName(), this->getAddress()).arg(this->getPort()).arg(this->getUser().getRealName(), this->getFormattedUtcTimestampHms());
|
||||
}
|
||||
|
||||
CVariant CServer::propertyByIndex(const BlackMisc::CPropertyIndex &index) const
|
||||
{
|
||||
if (index.isMyself()) { return CVariant::from(*this); }
|
||||
ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||
if (ITimestampBased::canHandleIndex(index)) { return ITimestampBased::propertyByIndex(index); }
|
||||
|
||||
const ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||
switch (i)
|
||||
{
|
||||
case IndexAddress:
|
||||
@@ -107,7 +127,9 @@ namespace BlackMisc
|
||||
void CServer::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant)
|
||||
{
|
||||
if (index.isMyself()) { (*this) = variant.to<CServer>(); return; }
|
||||
ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||
if (ITimestampBased::canHandleIndex(index)) { ITimestampBased::setPropertyByIndex(index, variant); return; }
|
||||
|
||||
const ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||
switch (i)
|
||||
{
|
||||
case IndexAddress:
|
||||
@@ -136,5 +158,33 @@ namespace BlackMisc
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int CServer::comparePropertyByIndex(const CPropertyIndex &index, const CServer &compareValue) const
|
||||
{
|
||||
if (index.isMyself()) { return this->getName().compare(compareValue.getName()); }
|
||||
if (ITimestampBased::canHandleIndex(index)) { return ITimestampBased::comparePropertyByIndex(index, compareValue);}
|
||||
const ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||
switch (i)
|
||||
{
|
||||
case IndexAddress:
|
||||
return this->getAddress().compare(compareValue.getAddress(), Qt::CaseInsensitive);
|
||||
case IndexDescription:
|
||||
return this->getDescription().compare(compareValue.getDescription(), Qt::CaseInsensitive);
|
||||
case IndexFsdSetup:
|
||||
return this->getFsdSetup().toQString().compare(compareValue.getFsdSetup().toQString());
|
||||
case IndexName:
|
||||
return this->getName().compare(compareValue.getName(), Qt::CaseInsensitive);
|
||||
case IndexIsAcceptingConnections:
|
||||
return Compare::compare(this->isAcceptingConnections(), compareValue.isAcceptingConnections());
|
||||
case IndexPort:
|
||||
return Compare::compare(this->getPort(), compareValue.getPort());
|
||||
case IndexUser:
|
||||
return this->getUser().comparePropertyByIndex(index.copyFrontRemoved(), compareValue.getUser());
|
||||
default:
|
||||
break;
|
||||
}
|
||||
Q_ASSERT_X(false, Q_FUNC_INFO, "No compare function");
|
||||
return 0;
|
||||
}
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "blackmisc/network/fsdsetup.h"
|
||||
#include "blackmisc/propertyindex.h"
|
||||
#include "blackmisc/statusmessagelist.h"
|
||||
#include "blackmisc/timestampbased.h"
|
||||
#include "blackmisc/valueobject.h"
|
||||
#include "blackmisc/variant.h"
|
||||
|
||||
@@ -29,7 +30,9 @@ namespace BlackMisc
|
||||
namespace Network
|
||||
{
|
||||
//! Value object encapsulating information of a server
|
||||
class BLACKMISC_EXPORT CServer : public CValueObject<CServer>
|
||||
class BLACKMISC_EXPORT CServer :
|
||||
public CValueObject<CServer>,
|
||||
public BlackMisc::ITimestampBased
|
||||
{
|
||||
public:
|
||||
//! Properties by index
|
||||
@@ -89,10 +92,10 @@ namespace BlackMisc
|
||||
//! Set port
|
||||
void setPort(int port) { m_port = port; }
|
||||
|
||||
//! Server is accepting connections (allows to disable server temporarily)
|
||||
//! Server is accepting connections (allows to disable server temporarily or generally)
|
||||
bool isAcceptingConnections() const { return m_isAcceptingConnections; }
|
||||
|
||||
//! Set whether server is accepting connections (allows to disable server temporarily)
|
||||
//! Set whether server is accepting connections (allows to disable server temporarily or generally)
|
||||
void setIsAcceptingConnections(bool value) { m_isAcceptingConnections = value; }
|
||||
|
||||
//! Is valid for login?
|
||||
@@ -107,15 +110,33 @@ namespace BlackMisc
|
||||
//! Set setup
|
||||
void setFsdSetup(const CFsdSetup &setup) { this->m_fsdSetup = setup; }
|
||||
|
||||
//! Connected since
|
||||
QDateTime getConnectedSince() const { return this->getUtcTimestamp(); }
|
||||
|
||||
//! Mark as connected since now
|
||||
void setConnectedSinceNow() { this->setCurrentUtcTime(); }
|
||||
|
||||
//! Mark as diconnected
|
||||
void markAsDisconnected() { this->setTimestampToNull(); }
|
||||
|
||||
//! Is connected?
|
||||
bool isConnected() const;
|
||||
|
||||
//! Validate, provide details about issues
|
||||
BlackMisc::CStatusMessageList validate() const;
|
||||
|
||||
//! Identifying a session, if not connected empty
|
||||
QString getServerSessionId() const;
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::Index::propertyByIndex
|
||||
CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const;
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::Index::setPropertyByIndex
|
||||
void setPropertyByIndex(const BlackMisc::CPropertyIndex &index, const CVariant &variant);
|
||||
|
||||
//! Compare by index
|
||||
int comparePropertyByIndex(const CPropertyIndex &index, const CServer &compareValue) const;
|
||||
|
||||
//! \copydoc BlackMisc::Mixin::String::toQString()
|
||||
QString convertToQString(bool i18n = false) const;
|
||||
|
||||
@@ -126,7 +147,7 @@ namespace BlackMisc
|
||||
int m_port = -1;
|
||||
CUser m_user;
|
||||
CFsdSetup m_fsdSetup;
|
||||
bool m_isAcceptingConnections = true; //!< temp. disable server
|
||||
bool m_isAcceptingConnections = true; //!< disable server for connections
|
||||
|
||||
BLACK_METACLASS(
|
||||
CServer,
|
||||
@@ -136,7 +157,8 @@ namespace BlackMisc
|
||||
BLACK_METAMEMBER(port),
|
||||
BLACK_METAMEMBER(user),
|
||||
BLACK_METAMEMBER(fsdSetup),
|
||||
BLACK_METAMEMBER(isAcceptingConnections)
|
||||
BLACK_METAMEMBER(isAcceptingConnections),
|
||||
BLACK_METAMEMBER(timestampMSecsSinceEpoch, 0, DisabledForJson | DisabledForComparison)
|
||||
);
|
||||
};
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user