diff options
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/include/transportplugin.h | 111 | ||||
| -rw-r--r-- | src/plugins/winsock/winsock.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/winsock/xmake.lua | 10 | ||||
| -rw-r--r-- | src/plugins/xmake.lua | 7 |
4 files changed, 123 insertions, 7 deletions
diff --git a/src/plugins/include/transportplugin.h b/src/plugins/include/transportplugin.h new file mode 100644 index 000000000..aee5b2e7a --- /dev/null +++ b/src/plugins/include/transportplugin.h @@ -0,0 +1,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)(); diff --git a/src/plugins/winsock/winsock.cpp b/src/plugins/winsock/winsock.cpp index 3ee3f0ccd..a6cfed1e3 100644 --- a/src/plugins/winsock/winsock.cpp +++ b/src/plugins/winsock/winsock.cpp @@ -24,6 +24,8 @@ ZEN_THIRD_PARTY_INCLUDES_END ////////////////////////////////////////////////////////////////////////// +using namespace zen; + class SocketTransportPlugin : public TransportPlugin, zen::RefCounted { public: diff --git a/src/plugins/winsock/xmake.lua b/src/plugins/winsock/xmake.lua index a4ef02a98..408a248b1 100644 --- a/src/plugins/winsock/xmake.lua +++ b/src/plugins/winsock/xmake.lua @@ -4,15 +4,11 @@ target("winsock") set_kind("shared") add_headerfiles("**.h") add_files("**.cpp") - add_includedirs(".", "../../zenhttp/include/zenhttp", "../../zencore/include") + add_links("Ws2_32") + add_includedirs(".", "../../zencore/include") set_symbols("debug") - - add_cxxflags("/showIncludes") + add_deps("plugins") if is_mode("release") then set_optimize("fastest") end - - if is_plat("windows") then - add_links("Ws2_32") - end diff --git a/src/plugins/xmake.lua b/src/plugins/xmake.lua new file mode 100644 index 000000000..9e4d49685 --- /dev/null +++ b/src/plugins/xmake.lua @@ -0,0 +1,7 @@ +-- Copyright Epic Games, Inc. All Rights Reserved. + +target('plugins') + set_kind("headeronly") + set_group("plugins") + add_headerfiles("**.h") + add_includedirs("include", {public=true}) |