Go to the documentation of this file.00001 #ifndef __ASIO_REALM_PROTOCOL__
00002 #define __ASIO_REALM_PROTOCOL__
00003
00004 #include "RealmProtocol.h"
00005
00006 namespace realm {
00007
00008 namespace protocolv1 {
00009
00010 template <typename WriteHandler>
00011 static void send(const RoutingPacket& p, asio::ip::tcp::socket& socket, WriteHandler handler) {
00012 std::vector<asio::const_buffer> bufs(4);
00013 bufs.push_back(asio::buffer(&p.type(), 1));
00014 bufs.push_back(asio::buffer(&p.getPayloadSize(), 4));
00015 bufs.push_back(asio::buffer(&p.getAddressCount(), 1));
00016 bufs.push_back(asio::buffer(&(p.getConnectionIds()[0]), p.getConnectionIds().size()));
00017 bufs.push_back(asio::buffer(*p.getMessage()));
00018 asio::async_write(socket, bufs, handler);
00019 }
00020
00021 template <typename WriteHandler>
00022 static void send(const DeliverPacket& p, asio::ip::tcp::socket& socket, WriteHandler handler) {
00023 std::vector<asio::const_buffer> bufs(4);
00024 bufs.push_back(asio::buffer(&p.type(), 1));
00025 bufs.push_back(asio::buffer(&p.getPayloadSize(), 4));
00026 bufs.push_back(asio::buffer(&p.getConnectionId(), 1));
00027 bufs.push_back(asio::buffer(*p.getMessage()));
00028 asio::async_write(socket, bufs, handler);
00029 }
00030
00031 template <typename WriteHandler>
00032 static void send(const UserJoinedPacket& p, asio::ip::tcp::socket& socket, WriteHandler handler) {
00033 std::vector<asio::const_buffer> bufs(4);
00034 bufs.push_back(asio::buffer(&p.type(), 1));
00035 bufs.push_back(asio::buffer(&p.getPayloadSize(), 4));
00036 bufs.push_back(asio::buffer(&p.getConnectionId(), 1));
00037 bufs.push_back(asio::buffer(&p.isMaster(), 1));
00038 bufs.push_back(asio::buffer(*p.getUserInfo()));
00039 asio::async_write(socket, bufs, handler);
00040 }
00041
00042 template <typename WriteHandler>
00043 static void send(const UserLeftPacket& p, asio::ip::tcp::socket& socket, WriteHandler handler) {
00044 std::vector<asio::const_buffer> bufs(2);
00045 bufs.push_back(asio::buffer(&p.type(), 1));
00046 bufs.push_back(asio::buffer(&p.getConnectionId(), 1));
00047 asio::async_write(socket, bufs, handler);
00048 }
00049
00050 template <typename WriteHandler>
00051 static void send(const SessionTakeOverPacket& p, asio::ip::tcp::socket& socket, WriteHandler handler) {
00052 asio::async_write(socket, asio::buffer(&p.type(), 1), handler);
00053 }
00054
00055 }
00056
00057 }
00058
00059 #endif