Chat-O-Matic/application/StatusManager.cpp

121 lines
2.2 KiB
C++
Raw Normal View History

/*
2011-12-03 16:38:03 -06:00
* Copyright 2009-2011, Pier Luigi Fiorini. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Pier Luigi Fiorini, pierluigi.fiorini@gmail.com
*/
2021-08-16 10:40:18 -05:00
#include "StatusManager.h"
#include <stdio.h>
2021-06-20 12:44:20 -05:00
#include "ChatProtocolMessages.h"
#include "NotifyMessage.h"
#include "Server.h"
2021-08-16 10:40:18 -05:00
static StatusManager* fInstance = NULL;
2021-08-16 10:40:18 -05:00
StatusManager::StatusManager()
2010-05-19 17:28:26 -05:00
:
2021-06-20 12:44:20 -05:00
fStatus(STATUS_OFFLINE),
fReplicantMessenger(NULL)
{
}
2021-08-16 10:40:18 -05:00
StatusManager::~StatusManager()
{
delete fReplicantMessenger;
}
2021-08-16 10:40:18 -05:00
StatusManager*
StatusManager::Get()
{
if (fInstance == NULL)
2021-08-16 10:40:18 -05:00
fInstance = new StatusManager();
return fInstance;
}
void
2021-08-16 10:40:18 -05:00
StatusManager::SetNickname(BString nick, int64 instance)
{
// Create message
BMessage* msg = new BMessage(IM_MESSAGE);
msg->AddInt32("im_what", IM_SET_OWN_NICKNAME);
2021-06-07 11:45:30 -05:00
msg->AddString("user_name", nick);
// Send message
if (instance > -1) {
msg->AddInt64("instance", instance);
Server::Get()->SendProtocolMessage(msg);
}
else
Server::Get()->SendAllProtocolMessage(msg);
}
void
2021-08-16 10:40:18 -05:00
StatusManager::SetReplicantMessenger(BMessenger* messenger)
{
fReplicantMessenger = messenger;
}
2021-06-20 12:44:20 -05:00
UserStatus
2021-08-16 10:40:18 -05:00
StatusManager::Status() const
{
return fStatus;
}
void
2021-08-16 10:40:18 -05:00
StatusManager::SetStatus(UserStatus status, const char* str, int64 instance)
{
if (fStatus == status && instance == -1)
return;
// Create status change message
BMessage* msg = new BMessage(IM_MESSAGE);
msg->AddInt32("im_what", IM_SET_OWN_STATUS);
msg->AddInt32("status", (int32)status);
if (str != NULL)
msg->AddString("message", str);
// Send message
if (instance > -1) {
msg->AddInt64("instance", instance);
Server::Get()->SendProtocolMessage(msg);
}
else
Server::Get()->SendAllProtocolMessage(msg);
// Notify status change
fStatus = status;
NotifyInteger(INT_ACCOUNT_STATUS, (int32)fStatus);
ReplicantStatusNotify((UserStatus)status);
}
void
2021-08-16 10:40:18 -05:00
StatusManager::SetStatus(UserStatus status, int64 instance)
{
SetStatus(status, NULL, instance);
}
void
2021-08-16 10:40:18 -05:00
StatusManager::ReplicantStatusNotify(UserStatus status, bool wait)
{
if(fReplicantMessenger != NULL && fReplicantMessenger->IsValid()) {
printf("notification sent\n");
BMessage mess(IM_OWN_STATUS_SET);
mess.AddInt32("status", status);
fReplicantMessenger->SendMessage(&mess);
}
}