blob: aee5b2e7af961e5b4b2edc45d352135507684076 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include <stdint.h>
// Important note: this header is meant to compile standalone
// and should therefore not depend on anything from the Zen codebase
namespace zen {
class TransportConnection;
class TransportPlugin;
class TransportServerConnection;
class TransportServer;
/*************************************************************************
The following interfaces are implemented on the server side, and instances
are provided to the plugins.
*************************************************************************/
/** Plugin-server interface for connection
This is returned by a call to TransportServer::CreateConnectionHandler
and there should be one instance created per established connection
The plugin uses this interface to feed data into the server side
protocol implementation which will parse the incoming messages and
dispatch to appropriate request handlers and ultimately call into
TransportConnection functions which write data back to the client
*/
class TransportServerConnection
{
public:
virtual uint32_t AddRef() const = 0;
virtual uint32_t Release() const = 0;
virtual void OnBytesRead(const void* Buffer, size_t DataSize) = 0;
};
/** Server interface
There will be one instance of this provided by the system to the transport plugin
The plugin can use this to register new connections
*/
class TransportServer
{
public:
virtual TransportServerConnection* CreateConnectionHandler(TransportConnection* Connection) = 0;
};
/*************************************************************************
The following interfaces are to be implemented by transport plugins.
*************************************************************************/
/** Interface which needs to be implemented by a transport plugin
This is responsible for setting up and running the communication
for a given transport.
Once initialized, the plugin should be ready to accept connections
using its own execution resources (threads, thread pools etc)
*/
class TransportPlugin
{
public:
virtual uint32_t AddRef() const = 0;
virtual uint32_t Release() const = 0;
virtual void Initialize(TransportServer* ServerInterface) = 0;
virtual void Shutdown() = 0;
/** Check whether this transport is usable.
*/
virtual bool IsAvailable() = 0;
};
/** A transport plugin provider needs to implement this interface
The plugin should create one instance of this per established
connection and register it with the TransportServer instance
CreateConnectionHandler() function. The server will subsequently
use this interface to write response data back to the client and
to manage the connection life cycle in general
*/
class TransportConnection
{
public:
virtual int64_t WriteBytes(const void* Buffer, size_t DataSize) = 0;
virtual void Shutdown(bool Receive, bool Transmit) = 0;
virtual void CloseConnection() = 0;
};
} // namespace zen
#if defined(_MSC_VER)
# define DLL_TRANSPORT_API __declspec(dllexport)
#else
# define DLL_TRANSPORT_API
#endif
extern "C"
{
DLL_TRANSPORT_API zen::TransportPlugin* CreateTransportPlugin();
}
typedef zen::TransportPlugin* (*PfnCreateTransportPlugin)();
|