78 lines
2.3 KiB
C
78 lines
2.3 KiB
C
|
|
||
|
// LuaTCPLink.h
|
||
|
|
||
|
// Declares the cLuaTCPLink class representing a Lua wrapper for the cTCPLink class and the callbacks it needs
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "../OSSupport/Network.h"
|
||
|
#include "LuaState.h"
|
||
|
#include "PluginLua.h"
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class cLuaTCPLink:
|
||
|
public cNetwork::cConnectCallbacks,
|
||
|
public cTCPLink::cCallbacks
|
||
|
{
|
||
|
public:
|
||
|
/** Creates a new instance of the link, attached to the specified lua state and wrapping the callbacks that are in a table at the specified stack pos. */
|
||
|
cLuaTCPLink(cPluginLua & a_Plugin, int a_CallbacksTableStackPos);
|
||
|
|
||
|
/** Sends the data contained in the string to the remote peer.
|
||
|
Returns true if successful, false on immediate failure (queueing the data failed or link not available). */
|
||
|
bool Send(const AString & a_Data);
|
||
|
|
||
|
/** Returns the IP address of the local endpoint of the connection. */
|
||
|
AString GetLocalIP(void) const;
|
||
|
|
||
|
/** Returns the port used by the local endpoint of the connection. */
|
||
|
UInt16 GetLocalPort(void) const;
|
||
|
|
||
|
/** Returns the IP address of the remote endpoint of the connection. */
|
||
|
AString GetRemoteIP(void) const;
|
||
|
|
||
|
/** Returns the port used by the remote endpoint of the connection. */
|
||
|
UInt16 GetRemotePort(void) const;
|
||
|
|
||
|
/** Closes the link gracefully.
|
||
|
The link will send any queued outgoing data, then it will send the FIN packet.
|
||
|
The link will still receive incoming data from remote until the remote closes the connection. */
|
||
|
void Shutdown(void);
|
||
|
|
||
|
/** Drops the connection without any more processing.
|
||
|
Sends the RST packet, queued outgoing and incoming data is lost. */
|
||
|
void Close(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;
|
||
|
|
||
|
/** The underlying link representing the connection.
|
||
|
May be nullptr. */
|
||
|
cTCPLinkPtr m_Link;
|
||
|
|
||
|
// cNetwork::cConnectCallbacks overrides:
|
||
|
virtual void OnConnected(cTCPLink & a_Link) override;
|
||
|
virtual void OnError(int a_ErrorCode, const AString & a_ErrorMsg) override;
|
||
|
|
||
|
// cTCPLink::cCallbacks overrides:
|
||
|
virtual void OnLinkCreated(cTCPLinkPtr a_Link) override;
|
||
|
virtual void OnReceivedData(const char * a_Data, size_t a_Length) override;
|
||
|
virtual void OnRemoteClosed(void) override;
|
||
|
// The OnError() callback is shared with cNetwork::cConnectCallbacks
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|