R-Type
R-Type project
NetworkConnection.hpp
1 #pragma once
2 
3 #include "NetworkWriter.hpp"
4 #include "MessagePacking.hpp"
5 #include "NetworkMessage.hpp"
6 #include <memory>
7 
8 namespace KapMirror {
10  public:
11  virtual ~NetworkConnection() = default;
12 
16  virtual int getConnectionId() = 0;
17 
21  virtual void disconnect() = 0;
22 
27  virtual void sendToTransport(const std::shared_ptr<ArraySegment<byte>>& data) = 0;
28 
32  template <typename T, typename = std::enable_if<std::is_base_of<NetworkMessage, T>::value>>
33  void send(T& message) {
34  NetworkWriter writer;
35  MessagePacking::pack(message, writer);
36  std::shared_ptr<ArraySegment<byte>> data = writer.toArraySegment();
37  sendToTransport(data);
38  }
39  };
40 } // namespace KapMirror
KapMirror::NetworkConnection::getConnectionId
virtual int getConnectionId()=0
Unique identifier for this connection that is assigned by the transport layer.
KapMirror::NetworkConnection::sendToTransport
virtual void sendToTransport(const std::shared_ptr< ArraySegment< byte >> &data)=0
Send raw data to the transport.
KapMirror::MessagePacking::pack
static void pack(T &message, NetworkWriter &writer)
Pack a message to a byte array with the message ID.
Definition: MessagePacking.hpp:26
KapMirror::NetworkWriter::toArraySegment
std::shared_ptr< ArraySegment< byte > > toArraySegment()
Get the buffer.
Definition: NetworkWriter.hpp:65
KapMirror::NetworkConnection::disconnect
virtual void disconnect()=0
Disconnects this connection.
KapMirror::NetworkConnection
Definition: NetworkConnection.hpp:9
KapMirror::NetworkWriter
Definition: NetworkWriter.hpp:12
KapMirror::NetworkConnection::send
void send(T &message)
Send a NetworkMessage to this connection.
Definition: NetworkConnection.hpp:33
KapMirror::ArraySegment
Definition: ArraySegment.hpp:9