summaryrefslogtreecommitdiffstats
path: root/src/Bindings/LuaUDPEndpoint.h
diff options
context:
space:
mode:
authorMattes D <github@xoft.cz>2015-02-20 14:28:05 +0100
committerMattes D <github@xoft.cz>2015-02-20 14:28:05 +0100
commit9c5162041e6e0699283862b87e2e424bf8e3b8b8 (patch)
tree3beed26a11a3fb35b79b444f2380f6b93dc2f3a7 /src/Bindings/LuaUDPEndpoint.h
parentNetworkSingleton: LibEvent thread is joined properly on server exit. (diff)
downloadcuberite-9c5162041e6e0699283862b87e2e424bf8e3b8b8.tar
cuberite-9c5162041e6e0699283862b87e2e424bf8e3b8b8.tar.gz
cuberite-9c5162041e6e0699283862b87e2e424bf8e3b8b8.tar.bz2
cuberite-9c5162041e6e0699283862b87e2e424bf8e3b8b8.tar.lz
cuberite-9c5162041e6e0699283862b87e2e424bf8e3b8b8.tar.xz
cuberite-9c5162041e6e0699283862b87e2e424bf8e3b8b8.tar.zst
cuberite-9c5162041e6e0699283862b87e2e424bf8e3b8b8.zip
Diffstat (limited to 'src/Bindings/LuaUDPEndpoint.h')
-rw-r--r--src/Bindings/LuaUDPEndpoint.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/Bindings/LuaUDPEndpoint.h b/src/Bindings/LuaUDPEndpoint.h
new file mode 100644
index 000000000..0587491ab
--- /dev/null
+++ b/src/Bindings/LuaUDPEndpoint.h
@@ -0,0 +1,86 @@
+
+// LuaUDPEndpoint.h
+
+// Declares the cLuaUDPEndpoint class representing a Lua wrapper for the cUDPEndpoint class and the callbacks it needs
+
+
+
+
+
+#pragma once
+
+#include "../OSSupport/Network.h"
+#include "PluginLua.h"
+
+
+
+
+
+// fwd:
+class cLuaUDPEndpoint;
+typedef SharedPtr<cLuaUDPEndpoint> cLuaUDPEndpointPtr;
+
+
+
+
+
+class cLuaUDPEndpoint:
+ public cUDPEndpoint::cCallbacks
+{
+public:
+ /** Creates a new instance of the endpoint, attached to the specified plugin and wrapping the callbacks that are in a table at the specified stack pos. */
+ cLuaUDPEndpoint(cPluginLua & a_Plugin, int a_CallbacksTableStackPos);
+
+ ~cLuaUDPEndpoint();
+
+ /** Opens the endpoint so that it starts listening for incoming data on the specified port.
+ a_Self is the shared pointer to self that the object keeps to keep itself alive for as long as it needs (for Lua). */
+ bool Open(UInt16 a_Port, cLuaUDPEndpointPtr a_Self);
+
+ /** Sends the data contained in the string to the specified remote peer.
+ Returns true if successful, false on immediate failure (queueing the data failed etc.) */
+ bool Send(const AString & a_Data, const AString & a_RemotePeer, UInt16 a_RemotePort);
+
+ /** Returns the port on which endpoint is listening for incoming data. */
+ UInt16 GetPort(void) const;
+
+ /** Returns true if the endpoint is open for incoming data. */
+ bool IsOpen(void) const;
+
+ /** Closes the UDP listener. */
+ void Close(void);
+
+ /** Enables outgoing broadcasts to be made using this endpoint. */
+ void EnableBroadcasts(void);
+
+ /** Called when Lua garbage-collects the object.
+ Releases the internal SharedPtr to self, so that the instance may be deallocated. */
+ void Release(void);
+
+protected:
+ /** The plugin for which the link is created. */
+ cPluginLua & m_Plugin;
+
+ /** The Lua table that holds the callbacks to be invoked. */
+ cLuaState::cRef m_Callbacks;
+
+ /** SharedPtr to self, so that the object can keep itself alive for as long as it needs (for Lua). */
+ cLuaUDPEndpointPtr m_Self;
+
+ /** The underlying network endpoint.
+ May be nullptr. */
+ cUDPEndpointPtr m_Endpoint;
+
+
+ /** Common code called when the endpoint is considered as terminated.
+ Releases m_Endpoint and m_Callbacks, each when applicable. */
+ void Terminated(void);
+
+ // cUDPEndpoint::cCallbacks overrides:
+ virtual void OnError(int a_ErrorCode, const AString & a_ErrorMsg) override;
+ virtual void OnReceivedData(const char * a_Data, size_t a_Size, const AString & a_RemotePeer, UInt16 a_RemotePort) override;
+};
+
+
+
+