diff options
| author | Sebastian | 2010-05-12 19:42:27 +0200 |
|---|---|---|
| committer | Sebastian | 2010-05-12 19:42:27 +0200 |
| commit | ce3329047d378a14006ce74ec273ac59e3375303 (patch) | |
| tree | 782430f270b4c7aca1b35d5b7813518e3797c555 /src/core/pvsChatClient.cpp | |
| download | pvs-ce3329047d378a14006ce74ec273ac59e3375303.tar.gz pvs-ce3329047d378a14006ce74ec273ac59e3375303.tar.xz pvs-ce3329047d378a14006ce74ec273ac59e3375303.zip | |
initial import of latest svn version
Diffstat (limited to 'src/core/pvsChatClient.cpp')
| -rw-r--r-- | src/core/pvsChatClient.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/core/pvsChatClient.cpp b/src/core/pvsChatClient.cpp new file mode 100644 index 0000000..6717e34 --- /dev/null +++ b/src/core/pvsChatClient.cpp @@ -0,0 +1,151 @@ +/* +# Copyright (c) 2009,2010 - OpenSLX Project, Computer Center University of +# Freiburg +# +# This program is free software distributed under the GPL version 2. +# See http://openslx.org/COPYING +# +# If you have any feedback please consult http://openslx.org/feedback and +# send your suggestions, praise, or complaints to feedback@openslx.org +# +# General information about OpenSLX can be found at http://openslx.org/ +# ----------------------------------------------------------------------------- +# pvsChatClient.cpp +# - Methods of the chat service. +# ----------------------------------------------------------------------------- +*/ + +#include "pvsChatClient.h" + +using namespace std; + +// Constructor +PVSChatClient::PVSChatClient() +{ + _chatServerConnection = NULL; + _source = getFullUsername(); + _registered = true; +} + +PVSChatClient::~PVSChatClient() +{ + +} + +// Get Chat login name. +QString PVSChatClient::getSource() +{ + return _source; +} + +// Set (from server) assigned username. +void PVSChatClient::setSource(QString name) +{ + _source = name; + _registered = true; +} + +bool PVSChatClient::isRegistered() +{ + return _registered; +} + +// Set PVSServerConnection +void PVSChatClient::setServerConnection(PVSServerConnection* sc) +{ + if (sc) + { + _chatServerConnection = sc; + _chatServerConnection->addChatHandler("*", this, &PVSChatClient::receive); + } +} + +// Send a message to Server. +void PVSChatClient::send(QString tar, QString msg) +{ + // Append username to msg. + QString username = _source; + username.append(":"); + msg = username.append(msg) ; + + // Create a Msg. + PVSMsg myMsg(PVSMESSAGE, tar, msg, 0); + + // Send the message. + if (_chatServerConnection) + _chatServerConnection->sendMessage(myMsg); + else + ConsoleLog writeError("[CHAT] Chat get no server connection"); // no ServerConnection + +} + +// Handle messages from server. +void PVSChatClient::receive(PVSMsg recv) +{ + PVSChatMsg chatMsg(recv); + + if(chatMsg.isCommand()) // command message for update of the client list. + { + _chatCommandDispatcher.fire(chatMsg); + } + else // conversation message. + { + if(chatMsg.getMsg().size()) + _chatMessageDispatcher.fire(chatMsg); + } +} + +// Return the current list of logged Clients. +QStringList PVSChatClient::getClients() +{ + return _clients; +} + +// Return the ip of the username. +QString PVSChatClient::getIPFromUsername(QString username) +{ + if(_clientsData.contains(username)) + { + return _clientsData.value(username); + } + else + { + ConsoleLog writeError("[CHAT] Wanted key was not found in clients hash table."); + return QString("ip not found"); + } +} + +// Add the name and ip of a new client. +void PVSChatClient::addClient(QString name, QString ip) +{ + if(!_clients.contains(name)) + { + _clients.append(name); + _clientsData[name] = ip; + } + else + { + ConsoleLog writeError("[CHAT] The new client wasn't added, because exists allready."); + } +} + +// Remove the name and ip of a removed client. +void PVSChatClient::removeClient(QString name) +{ + if(_clients.contains(name)) + { + _clients.removeOne(name); + _clientsData.remove(name); + } + else + { + ConsoleLog writeError("[CHAT] The new client can not be removed, because doesn't exist."); + } +} + +// Delete all infomation about client. +void PVSChatClient::clearClients() +{ + _clients.clear(); + _clientsData.clear(); +} |
