Skip to content

Commit

Permalink
libdeng2|Network: Added BlockPacket
Browse files Browse the repository at this point in the history
Packet with a Block as payload.
  • Loading branch information
skyjake committed Feb 19, 2013
1 parent 5a71bf7 commit 9201186
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 1 deletion.
1 change: 1 addition & 0 deletions doomsday/libdeng2/include/de/BlockPacket
@@ -0,0 +1 @@
#include "net/blockpacket.h"
50 changes: 50 additions & 0 deletions doomsday/libdeng2/include/de/net/blockpacket.h
@@ -0,0 +1,50 @@
/** @file blockpacket.h Packet that contains a Block.
*
* @authors Copyright (c) 2013 Jaakko Keränen <jaakko.keranen@iki.fi>
*
* @par License
* GPL: http://www.gnu.org/licenses/gpl.html
*
* <small>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, see:
* http://www.gnu.org/licenses</small>
*/

#ifndef LIBDENG2_BLOCKPACKET_H
#define LIBDENG2_BLOCKPACKET_H

#include "../Packet"
#include "../Block"

namespace de {

/**
* Packet that contains a Block.
*
* @ingroup protocol
*/
class DENG2_PUBLIC BlockPacket : public Packet, public Block
{
public:
BlockPacket();

BlockPacket(Block const &block);

// Implements ISerializable.
void operator >> (Writer &to) const;
void operator << (Reader &from);

public:
/// Constructor for a Protocol.
static Packet *fromBlock(Block const &block);
};

} // namespace de

#endif // LIBDENG2_BLOCKPACKET_H
2 changes: 1 addition & 1 deletion doomsday/libdeng2/include/de/net/packet.h
Expand Up @@ -109,7 +109,7 @@ class DENG2_PUBLIC Packet : public ISerializable
if(checkType(from, packetTypeIdentifier))
{
std::auto_ptr<PacketType> p(new PacketType);
from >> *p.get();
from >> *static_cast<IReadable *>(p.get());
return p.release();
}
return 0;
Expand Down
3 changes: 3 additions & 0 deletions doomsday/libdeng2/network.pri
@@ -1,6 +1,7 @@
HEADERS += \
include/de/Address \
include/de/Beacon \
include/de/BlockPacket \
include/de/IdentifiedPacket \
include/de/Message \
include/de/ListenSocket \
Expand All @@ -13,6 +14,7 @@ HEADERS += \
HEADERS += \
include/de/net/address.h \
include/de/net/beacon.h \
include/de/net/blockpacket.h \
include/de/net/identifiedpacket.h \
include/de/net/message.h \
include/de/net/listensocket.h \
Expand All @@ -28,6 +30,7 @@ HEADERS +=
SOURCES += \
src/net/address.cpp \
src/net/beacon.cpp \
src/net/blockpacket.cpp \
src/net/identifiedpacket.cpp \
src/net/message.cpp \
src/net/listensocket.cpp \
Expand Down
52 changes: 52 additions & 0 deletions doomsday/libdeng2/src/net/blockpacket.cpp
@@ -0,0 +1,52 @@
/** @file blockpacket.cpp Packet that contains a block of data.
*
* @authors Copyright (c) 2013 Jaakko Keränen <jaakko.keranen@iki.fi>
*
* @par License
* GPL: http://www.gnu.org/licenses/gpl.html
*
* <small>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, see:
* http://www.gnu.org/licenses</small>
*/

#include "de/BlockPacket"
#include "de/Writer"
#include "de/Reader"

namespace de {

static const char* BLOCK_PACKET_TYPE = "BLCK";

BlockPacket::BlockPacket() : Packet(BLOCK_PACKET_TYPE)
{}

BlockPacket::BlockPacket(Block const &block)
: Packet(BLOCK_PACKET_TYPE), Block(block)
{}

void BlockPacket::operator >> (Writer &to) const
{
Packet::operator >> (to);
to << *static_cast<Block const *>(this);
}

void BlockPacket::operator << (Reader &from)
{
Packet::operator << (from);
from >> *static_cast<Block *>(this);
}

Packet *BlockPacket::fromBlock(Block const &block)
{
// Attempts to deserialize from the data in block.
return constructFromBlock<BlockPacket>(block, BLOCK_PACKET_TYPE);
}

} // namespace de

0 comments on commit 9201186

Please sign in to comment.