2019-08-07 22:15:26 +03:00
|
|
|
#include "mainclient.h"
|
2019-08-20 17:54:00 +03:00
|
|
|
#include "notificationservice.h"
|
2019-08-07 22:15:26 +03:00
|
|
|
#include "playerclientdata.h"
|
|
|
|
|
|
|
|
#include <QSharedPointer>
|
|
|
|
|
2019-08-08 13:42:45 +03:00
|
|
|
OnlineStatus MainClient::onlineStatus() const {
|
|
|
|
return _onlineStatus;
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainClient::setOnlineStatus(OnlineStatus onlineStatus) {
|
|
|
|
if (_onlineStatus == onlineStatus)
|
|
|
|
return;
|
|
|
|
|
|
|
|
emit sigOnlineStatusChanged(_onlineStatus = onlineStatus);
|
2019-08-20 17:54:00 +03:00
|
|
|
pushNotify(onlineStatus);
|
|
|
|
|
2019-08-08 13:42:45 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
void MainClient::clientStatusChanged() {
|
|
|
|
auto status = OnlineStatus::ClientIsOffline;
|
2019-08-08 19:11:17 +03:00
|
|
|
|
2019-08-08 13:42:45 +03:00
|
|
|
if (isOnline()) {
|
|
|
|
status = OnlineStatus::AuthorizationRequired;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isLogin()) {
|
|
|
|
status = OnlineStatus::Success;
|
|
|
|
}
|
|
|
|
|
|
|
|
setOnlineStatus(status);
|
|
|
|
}
|
|
|
|
|
2019-08-20 17:54:00 +03:00
|
|
|
void MainClient::pushNotify(OnlineStatus onlineStatus) {
|
|
|
|
|
|
|
|
|
|
|
|
switch (onlineStatus) {
|
|
|
|
|
2019-08-22 09:53:48 +03:00
|
|
|
case OnlineStatus::Success: {
|
2019-08-20 17:54:00 +03:00
|
|
|
|
|
|
|
NotificationService::getService()->setNotify(
|
|
|
|
NotificationData(tr("Login status"), tr("Success")));
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2019-08-22 09:53:48 +03:00
|
|
|
case OnlineStatus::AuthorizationRequired: {
|
2019-08-20 17:54:00 +03:00
|
|
|
|
2019-08-22 09:53:48 +03:00
|
|
|
NotificationService::getService()->setNotify(
|
|
|
|
NotificationData(tr("Login status"), tr("Authorization Required")));
|
2019-08-20 17:54:00 +03:00
|
|
|
|
2019-08-22 09:53:48 +03:00
|
|
|
break;
|
|
|
|
}
|
2019-08-20 17:54:00 +03:00
|
|
|
|
2019-08-22 09:53:48 +03:00
|
|
|
case OnlineStatus::WaitForAnswer: {
|
2019-08-20 17:54:00 +03:00
|
|
|
|
2019-08-22 09:53:48 +03:00
|
|
|
NotificationService::getService()->setNotify(
|
|
|
|
NotificationData(tr("Login status"), tr("Wait for answer")));
|
2019-08-20 17:54:00 +03:00
|
|
|
|
2019-08-22 09:53:48 +03:00
|
|
|
break;
|
|
|
|
}
|
2019-08-20 17:54:00 +03:00
|
|
|
|
2019-08-22 09:53:48 +03:00
|
|
|
case OnlineStatus::AuthorizationFail: {
|
2019-08-20 17:54:00 +03:00
|
|
|
|
|
|
|
NotificationService::getService()->setNotify(
|
|
|
|
NotificationData(tr("Login result"), tr("Authorization fail") , "", NotificationData::Error));
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2019-08-22 09:53:48 +03:00
|
|
|
case OnlineStatus::ClientIsOffline: {
|
2019-08-20 17:54:00 +03:00
|
|
|
|
|
|
|
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: {
|
2019-08-20 17:54:00 +03:00
|
|
|
|
|
|
|
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);
|
2019-08-08 13:42:45 +03:00
|
|
|
clientStatusChanged();
|
2019-08-07 22:15:26 +03:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainClient::handleOnlineChanged(bool) {
|
2019-08-08 13:42:45 +03:00
|
|
|
clientStatusChanged();
|
2019-08-07 22:15:26 +03:00
|
|
|
}
|
|
|
|
|
2019-08-08 13:42:45 +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);
|
|
|
|
}
|
|
|
|
|
2019-08-17 19:46:54 +03:00
|
|
|
bool MainClient::login(const QString &gmail, const QByteArray &pass, bool) {
|
2019-08-08 13:42:45 +03:00
|
|
|
if (!ClientProtocol::Client::login(gmail, pass)) {
|
|
|
|
setOnlineStatus(OnlineStatus::AuthorizationFail);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2019-08-17 19:46:54 +03:00
|
|
|
bool MainClient::registration(const QString &gmail,
|
2019-08-08 13:42:45 +03:00
|
|
|
const QByteArray &pass) {
|
|
|
|
|
2019-08-17 19:46:54 +03:00
|
|
|
if (!ClientProtocol::Client::registration(gmail, pass)) {
|
2019-08-08 13:42:45 +03:00
|
|
|
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();
|
|
|
|
}
|