// 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"
classcLuaTCPLink:
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). */
boolSend(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. */
UInt16GetLocalPort(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. */
UInt16GetRemotePort(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. */
voidShutdown(void);
/** Drops the connection without any more processing.
Sends the RST packet, queued outgoing and incoming data is lost. */
voidClose(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.