summaryrefslogtreecommitdiff
path: root/plugins/!NotAdopted/Xfire/xfiretest/packetreader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/!NotAdopted/Xfire/xfiretest/packetreader.cpp')
-rw-r--r--plugins/!NotAdopted/Xfire/xfiretest/packetreader.cpp163
1 files changed, 163 insertions, 0 deletions
diff --git a/plugins/!NotAdopted/Xfire/xfiretest/packetreader.cpp b/plugins/!NotAdopted/Xfire/xfiretest/packetreader.cpp
new file mode 100644
index 0000000000..d06c480a6e
--- /dev/null
+++ b/plugins/!NotAdopted/Xfire/xfiretest/packetreader.cpp
@@ -0,0 +1,163 @@
+/*
+ * xfirelib - C++ Library for the xfire protocol.
+ * Copyright (C) 2006 by
+ * Beat Wolf <asraniel@fryx.ch> / http://gfire.sf.net
+ * Herbert Poul <herbert.poul@gmail.com> / http://goim.us
+ * http://xfirelib.sphene.net
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "stdafx.h"
+
+#include "packetreader.h"
+
+#include <iostream>
+#include "xfirepacket.h"
+
+#include "clientinformationpacket.h"
+#include "authpacket.h"
+#include "loginfailedpacket.h"
+#include "loginsuccesspacket.h"
+#include "buddylistonlinepacket.h"
+#include "buddylistnamespacket.h"
+#include "clanbuddylistnamespacket.h"
+#include "xfireclanpacket.h"
+#include "buddylistgamespacket.h"
+#include "buddylistgames2packet.h"
+#include "messagepacket.h"
+#include "otherloginpacket.h"
+#include "invitebuddypacket.h"
+#include "inviterequestpacket.h"
+#include "recvremovebuddypacket.h"
+#include "recvstatusmessagepacket.h"
+#include "recvoldversionpacket.h"
+#include "recvdidpacket.h"
+#include "recvprefspacket.h"
+#include "gameinfopacket.h"
+#include "claninvitationpacket.h"
+#include "xfirefoundbuddys.h"
+#include "buddyinfo.h"
+#include "friendsoffriendlist.h"
+#include "recvbuddychangednick.h"
+
+#include "xdebug.h"
+//#include "packetlistener.h"
+
+namespace xfirelib {
+ using namespace std;
+
+ PacketReader::PacketReader(Socket *socket) {
+ this->socket = socket;
+ this->packetListeners = new vector<PacketListener *>();
+
+ initPackets();
+ }
+ void PacketReader::setSocket(Socket *socket) {
+ this->socket = socket;
+ }
+ PacketReader::~PacketReader() {
+ // TODO: delete each packetListener ..
+ delete packetListeners;
+
+ while(!packets->empty()) { delete packets->at(packets->size()-1); packets->pop_back(); }
+ delete packets;
+ }
+
+ void PacketReader::initPackets() {
+ packets = new vector <XFirePacketContent *>();
+ packets->push_back( new ClientInformationPacket() );
+ packets->push_back( new AuthPacket() );
+ packets->push_back( new LoginFailedPacket() );
+ packets->push_back( new LoginSuccessPacket() );
+ packets->push_back( new MessagePacket() );
+ packets->push_back( new BuddyListOnlinePacket() );
+ packets->push_back( new BuddyListNamesPacket() );
+ packets->push_back( new BuddyListGamesPacket() );
+ packets->push_back( new BuddyListGames2Packet() );
+ packets->push_back( new OtherLoginPacket() );
+ packets->push_back( new InviteBuddyPacket() );
+ packets->push_back( new InviteRequestPacket() );
+ packets->push_back( new RecvRemoveBuddyPacket() );
+ packets->push_back( new RecvDidPacket() );
+ packets->push_back( new RecvStatusMessagePacket() );
+ packets->push_back( new RecvOldVersionPacket() );
+ packets->push_back( new RecvPrefsPacket() );
+ //neue packetklassen hinzugefügt - dufte
+ packets->push_back( new FriendsBuddyListNamesPacket() );
+ packets->push_back( new ClanBuddyListNamesPacket() );
+ packets->push_back( new XFireClanPacket() );
+ packets->push_back( new GameInfoPacket() );
+ packets->push_back( new ClanInvitationPacket() );
+ packets->push_back( new XFireFoundBuddys() );
+ packets->push_back( new BuddyInfoPacket() );
+ packets->push_back( new RecvBuddyChangedNick() );
+ }
+
+
+ void *muh(void *ptr);
+
+ /* I moved thread starting to Client
+
+ void PacketReader::startListening() {
+ PacketReader *myself = this;
+ void* (*func)(void*) = &xfirelib::PacketReader::thread_start;
+ XINFO(("About to start thread\n"));
+ int ret = pthread_create( &readthread, NULL, func, (void*)myself );
+ XDEBUG(("ret: %d\n",ret));
+ }
+ */
+
+ void PacketReader::run() {
+ // start receiving on socket...
+ XDEBUG(("Starting run() method .... \n"));
+ while(socket != NULL) {
+ string str;
+ //int b = socket->recv(str);
+ XFirePacket *packet = new XFirePacket(this);
+ XDEBUG(("Waiting for next packet ... \n"));
+ if(packet==NULL) continue;
+ packet->recvPacket( socket );
+ XINFO(("Received packet\n"));
+ if(packet->getContent() != NULL) {
+ fireListeners( packet );
+ } else {
+ XDEBUG(("Packet Content was NULL ... Unknown Packet Id ??\n"));
+ }
+ XDEBUG(("Notified Listeners\n"));// << b << "bytes: " << str << endl;
+ delete packet->getContent();
+ delete packet;
+ }
+ }
+
+ void PacketReader::fireListeners( XFirePacket *packet ) {
+ for(vector<PacketListener *>::iterator it = packetListeners->begin() ;
+ it != packetListeners->end() ; ++it) {
+ (*it)->receivedPacket( packet );
+ }
+ }
+
+ XFirePacketContent *PacketReader::getPacketContentClass(int packetId) {
+ XDEBUG(("Searching for a content class...\n"));
+ for(uint i = 0 ; i < packets->size() ; i++)
+ if(packets->at(i)->getPacketId() == packetId) return packets->at(i);
+ XDEBUG(("None Found\n"));
+ return NULL;
+ }
+
+ void PacketReader::addPacketListener( PacketListener *listener ) {
+ packetListeners->push_back( listener );
+ }
+};