Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/network/src/network/packet/Packet.cc @ 1701

Last change on this file since 1701 was 1701, checked in by scheusso, 16 years ago

some missing files

File size: 1.9 KB
Line 
1
2#include <enet/enet.h>
3
4#include "Packet.h"
5#include "network/ConnectionManager.h"
6#include "network/ClientInformation.h"
7
8#include "Acknowledgement.h"
9#include "Chat.h"
10#include "ClassID.h"
11#include "network/Host.h"
12//#include "Gamestate.h"
13
14namespace network{
15
16namespace packet{
17 
18#define _PACKETID           0
19 
20
21 
22Packet::Packet(){
23  packetDirection_ = ENUM::Outgoing;
24  clientID_=0;
25  packetContent_=0;
26  enetPacket_=0;
27}
28
29Packet::Packet(PacketContent *content){
30  packetDirection_ = ENUM::Outgoing;
31  clientID_=0;
32  packetContent_=content;
33  enetPacket_=0;
34}
35
36Packet::Packet(ENetPacket *packet, ENetPeer *peer){
37  packetDirection_ = ENUM::Incoming;
38  enetPacket_ = packet;
39  clientID_ = ClientInformation::findClient(&peer->address)->getID();
40  packetContent_ = createPacketContent(packet);
41}
42
43Packet::~Packet(){
44  if(packetContent_)
45    delete packetContent_;
46  if(enetPacket_){
47    enet_packet_destroy(enetPacket_);
48  }
49}
50
51
52bool Packet::send(){
53  if(!packetDirection_ == ENUM::Outgoing || !packetDirection_ == ENUM::Bidirectional )
54    return false;
55  if(!enetPacket_){
56    if(!packetContent_)
57      return false;
58    enetPacket_ = enet_packet_create(packetContent_->getData(), packetContent_->getSize(), packetContent_->getFlags());
59  }
60  network::Host::addPacket( enetPacket_, clientID_);
61  return true;
62}
63
64PacketContent *Packet::createPacketContent(ENetPacket *packet){
65  unsigned char *data = packet->data;
66  switch( *(ENUM::Type *)&data[_PACKETID] )
67  {
68    case ENUM::Acknowledgement:
69      packetContent_ = new Acknowledgement( data, clientID_ );
70      break;
71    case ENUM::Chat:
72      packetContent_ = new Chat( data, clientID_ );
73      break;
74    case ENUM::ClassID:
75      packetContent_ = new ClassID( data );
76      break;
77    case ENUM::Gamestate:
78      // TODO: remove brackets
79      // packetContent_ = new Gamestate( data );
80      break;
81    default:
82      assert(0);
83  }
84  return packetContent_;
85}
86
87} // namespace packet
88
89} // namespace network
90
Note: See TracBrowser for help on using the repository browser.