181 lines
4.3 KiB
C++
Raw Normal View History

2019-08-07 22:15:26 +03:00
#include "mainclient.h"
#include "notificationservice.h"
2019-08-07 22:15:26 +03:00
#include "playerclientdata.h"
#include <QSharedPointer>
OnlineStatus MainClient::onlineStatus() const {
return _onlineStatus;
}
void MainClient::setOnlineStatus(OnlineStatus onlineStatus) {
if (_onlineStatus == onlineStatus)
return;
emit sigOnlineStatusChanged(_onlineStatus = onlineStatus);
pushNotify(onlineStatus);
}
void MainClient::clientStatusChanged() {
auto status = OnlineStatus::ClientIsOffline;
2019-08-08 19:11:17 +03:00
if (isOnline()) {
status = OnlineStatus::AuthorizationRequired;
}
if (isLogin()) {
status = OnlineStatus::Success;
}
setOnlineStatus(status);
}
void MainClient::pushNotify(OnlineStatus onlineStatus) {
switch (onlineStatus) {
2019-08-22 09:53:48 +03:00
case OnlineStatus::Success: {
NotificationService::getService()->setNotify(
NotificationData(tr("Login status"), tr("Success")));
break;
}
2019-08-22 09:53:48 +03:00
case OnlineStatus::AuthorizationRequired: {
2019-08-22 09:53:48 +03:00
NotificationService::getService()->setNotify(
NotificationData(tr("Login status"), tr("Authorization Required")));
2019-08-22 09:53:48 +03:00
break;
}
2019-08-22 09:53:48 +03:00
case OnlineStatus::WaitForAnswer: {
2019-08-22 09:53:48 +03:00
NotificationService::getService()->setNotify(
NotificationData(tr("Login status"), tr("Wait for answer")));
2019-08-22 09:53:48 +03:00
break;
}
2019-08-22 09:53:48 +03:00
case OnlineStatus::AuthorizationFail: {
NotificationService::getService()->setNotify(
NotificationData(tr("Login result"), tr("Authorization fail") , "", NotificationData::Error));
break;
}
2019-08-22 09:53:48 +03:00
case OnlineStatus::ClientIsOffline: {
NotificationService::getService()->setNotify(
NotificationData(tr("Login result"), tr("Client is offline"), "", NotificationData::Warning));
break;
}
2019-08-22 09:53:48 +03:00
case OnlineStatus::OfflineMode: {
NotificationService::getService()->setNotify(
NotificationData(tr("Login result"), tr("Offline Mode")));
break;
}
default: break;
}
}
2019-08-07 22:15:26 +03:00
void MainClient::handleReceivePackage(ClientProtocol::Command cmd, const QByteArray &obj) {
switch (cmd) {
case ClientProtocol::Command::Player: {
auto playerData = QSharedPointer<PlayerClientData>::create();
playerData->fromBytes(obj);
_users [playerData->id()] = playerData;
2019-08-09 21:20:33 +03:00
if (playerData->id() == _currentUserId) {
emit currentUserDataChanged(_users [playerData->id()]);
}
2019-08-07 22:15:26 +03:00
break;
}
2019-08-17 20:07:11 +03:00
case ClientProtocol::Command::BadRequest: {
2019-08-17 23:42:22 +03:00
2019-08-22 09:53:48 +03:00
NotificationService::getService()->setNotify(
NotificationData(tr("Request"), tr("Bad Request"), "",
NotificationData::Error));
2019-08-17 20:07:11 +03:00
break;
}
2019-08-07 22:15:26 +03:00
default: return;
}
}
void MainClient::handleLoginChanged(bool logined) {
this->setSubscribe(ClientProtocol::Command::Player, logined, _currentUserId);
clientStatusChanged();
2019-08-07 22:15:26 +03:00
}
void MainClient::handleOnlineChanged(bool) {
clientStatusChanged();
2019-08-07 22:15:26 +03:00
}
MainClient::MainClient(const QString &addrress, unsigned short port, QObject *ptr):
ClientProtocol::Client (addrress, port, ptr) {
2019-08-07 22:15:26 +03:00
connect(this, &MainClient::sigIncommingData,
this, &MainClient::handleReceivePackage);
connect(this, &MainClient::onlineChanged,
this, &MainClient::handleOnlineChanged);
connect(this, &MainClient::loginChanged,
this, &MainClient::handleLoginChanged);
}
bool MainClient::login(const QString &gmail, const QByteArray &pass, bool) {
if (!ClientProtocol::Client::login(gmail, pass)) {
setOnlineStatus(OnlineStatus::AuthorizationFail);
return false;
}
return true;
}
bool MainClient::registration(const QString &gmail,
const QByteArray &pass) {
if (!ClientProtocol::Client::registration(gmail, pass)) {
setOnlineStatus(OnlineStatus::AuthorizationFail);
return false;
}
return true;
}
2019-08-08 19:11:17 +03:00
void MainClient::playOffline() {
if (_onlineStatus == OnlineStatus::ClientIsOffline) {
setOnlineStatus(OfflineMode);
}
}
void MainClient::tryConnect(const QString &addrress, unsigned short port) {
setOnlineStatus(ClientIsOffline);
connectToHost(addrress, port);
}
2019-08-07 22:15:26 +03:00
MainClient::~MainClient() {
for (auto &i: _users) {
i.clear();
}
_users.clear();
}