You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdenetwork/kopete/protocols/msn/msnswitchboardsocket.h

167 lines
4.6 KiB

/*
msnswitchboardsocket.h - switch board connection socket
Copyright (c) 2002 by Martijn Klingens <klingens@kde.org>
Copyright (c) 2002-2006 by Olivier Goffart <ogoffart@ kde.org>
Kopete (c) 2002-2005 by the Kopete developers <kopete-devel@kde.org>
Portions of this code are taken from KMerlin,
(c) 2001 by Olaf Lueg <olueg@olsd.de>
*************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
*************************************************************************
*/
#ifndef MSNSWITCHBOARDSOCKET_H
#define MSNSWITCHBOARDSOCKET_H
#include <qobject.h>
#include <qstrlist.h>
#include <qvaluevector.h>
#include <kstringhandler.h>
#include "msnsocket.h"
namespace Kopete { class Message; }
class MSNAccount;
class QTimer;
class MSNP2PDisplatcher;
class KTempFile;
namespace P2P { class Dispatcher; }
#include "dispatcher.h"
class KOPETE_EXPORT MSNSwitchBoardSocket : public MSNSocket
{
Q_OBJECT
public:
/**
* Contructor: id is the KopeteMessageMangager's id
*/
MSNSwitchBoardSocket( MSNAccount * account , QObject *parent);
~MSNSwitchBoardSocket();
private:
P2P::Dispatcher *m_dispatcher;
MSNAccount *m_account;
QString m_myHandle; // our handle
// contains the handle of the last person that msg'ed us.
// since we receive the actual message by readBlock(), we need
// to remember what the handle was of the person sending us the message.
QString m_msgHandle;
QString m_ID;
QString m_auth;
QStringList m_chatMembers;
//used for emoticons
QValueList<const Kopete::Message> m_msgQueue;
unsigned m_recvIcons;
QMap<QString , QPair<QString , KTempFile*> > m_emoticons;
Kopete::Message &parseCustomEmoticons(Kopete::Message &msg);
QTimer *m_emoticonTimer;
QPtrList<KTempFile> m_typewrited;
struct InkMessage{
Q_UINT32 chunks;
QString data;
};
QMap<QString, InkMessage> m_inkMessageBuffer;
/** the number of chunk for currents messages */
unsigned int m_chunks;
/** true is we already sent the x-clientcaps message */
bool m_clientcapsSent;
private:
void DispatchInkMessage(const QString &base64String);
protected:
/**
* Handle an MSN command response line.
*/
virtual void parseCommand( const QString &cmd, uint id,
const QString &data );
/**
* Handle exceptions that might occur during a chat.
*/
virtual void handleError( uint code, uint id );
QString parseFontAttr( QString str, QString attr );
public:
void connectToSwitchBoard( QString ID, QString address, QString auth );
void setHandle( QString handle ) { m_myHandle = handle; }
void setMsgHandle( QString handle ) { m_msgHandle = handle; }
const QStringList &chatMembers() { return m_chatMembers; }
void userLeftChat( const QString &handle , const QString &reason );
int sendMsg( const Kopete::Message &msg );
int sendCustomEmoticon(const QString &name, const QString &filename);
int sendNudge();
P2P::Dispatcher* PeerDispatcher();
public slots:
void slotCloseSession();
void slotInviteContact(const QString &handle);
/**
* Notify the server that the user is typing a message
*/
void sendTypingMsg( bool isTyping );
void requestDisplayPicture();
/** workaround Bug 113425 . see slotKeepAliveTimer() **/
QTimer *m_keepAlive;
int m_keepAliveNb;
private slots:
void slotOnlineStatusChanged( MSNSocket::OnlineStatus status );
void slotSocketClosed( );
void slotReadMessage( const QByteArray &bytes );
void slotEmoticonReceived( KTempFile *, const QString& );
void slotIncomingFileTransfer(const QString& from, const QString& fileName, Q_INT64 fileSize);
void cleanQueue();
/** workaround Bug 113425 . see comment inside the function **/
void slotKeepAliveTimer();
signals:
void msgReceived( Kopete::Message &msg );
void receivedTypingMsg( const QString &contactId, bool isTyping );
void msgAcknowledgement(unsigned int, bool);
void userJoined(const QString& handle , const QString &publicName , bool IRO);
void userLeft(const QString& handle , const QString &reason);
void nudgeReceived(const QString &handle);
void switchBoardClosed( );
void invitation(const QString& handle, const QString& msg);
};
#endif
// vim: set noet ts=4 sts=4 sw=4: