cNetwork: Exported the Connect() method and cTCPLink class to Lua.
This commit is contained in:
parent
e7424adbf4
commit
360c632e36
@ -9,8 +9,10 @@ SET (SRCS
|
|||||||
DeprecatedBindings.cpp
|
DeprecatedBindings.cpp
|
||||||
LuaChunkStay.cpp
|
LuaChunkStay.cpp
|
||||||
LuaState.cpp
|
LuaState.cpp
|
||||||
|
LuaTCPLink.cpp
|
||||||
LuaWindow.cpp
|
LuaWindow.cpp
|
||||||
ManualBindings.cpp
|
ManualBindings.cpp
|
||||||
|
ManualBindings_Network.cpp
|
||||||
ManualBindings_RankManager.cpp
|
ManualBindings_RankManager.cpp
|
||||||
Plugin.cpp
|
Plugin.cpp
|
||||||
PluginLua.cpp
|
PluginLua.cpp
|
||||||
@ -24,6 +26,7 @@ SET (HDRS
|
|||||||
LuaChunkStay.h
|
LuaChunkStay.h
|
||||||
LuaFunctions.h
|
LuaFunctions.h
|
||||||
LuaState.h
|
LuaState.h
|
||||||
|
LuaTCPLink.h
|
||||||
LuaWindow.h
|
LuaWindow.h
|
||||||
ManualBindings.h
|
ManualBindings.h
|
||||||
Plugin.h
|
Plugin.h
|
||||||
|
@ -656,6 +656,18 @@ void cLuaState::Push(cItems * a_Items)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cLuaState::Push(cLuaTCPLink * a_TCPLink)
|
||||||
|
{
|
||||||
|
ASSERT(IsValid());
|
||||||
|
|
||||||
|
tolua_pushusertype(m_LuaState, a_TCPLink, "cTCPLink");
|
||||||
|
m_NumCurrentFunctionArgs += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cLuaState::Push(cMonster * a_Monster)
|
void cLuaState::Push(cMonster * a_Monster)
|
||||||
{
|
{
|
||||||
ASSERT(IsValid());
|
ASSERT(IsValid());
|
||||||
|
@ -59,6 +59,7 @@ class cTNTEntity;
|
|||||||
class cHopperEntity;
|
class cHopperEntity;
|
||||||
class cBlockEntity;
|
class cBlockEntity;
|
||||||
class cBoundingBox;
|
class cBoundingBox;
|
||||||
|
class cLuaTCPLink;
|
||||||
|
|
||||||
typedef cBoundingBox * pBoundingBox;
|
typedef cBoundingBox * pBoundingBox;
|
||||||
typedef cWorld * pWorld;
|
typedef cWorld * pWorld;
|
||||||
@ -202,6 +203,7 @@ public:
|
|||||||
void Push(cHopperEntity * a_Hopper);
|
void Push(cHopperEntity * a_Hopper);
|
||||||
void Push(cItem * a_Item);
|
void Push(cItem * a_Item);
|
||||||
void Push(cItems * a_Items);
|
void Push(cItems * a_Items);
|
||||||
|
void Push(cLuaTCPLink * a_TCPLink);
|
||||||
void Push(cMonster * a_Monster);
|
void Push(cMonster * a_Monster);
|
||||||
void Push(cPickup * a_Pickup);
|
void Push(cPickup * a_Pickup);
|
||||||
void Push(cPlayer * a_Player);
|
void Push(cPlayer * a_Player);
|
||||||
|
229
src/Bindings/LuaTCPLink.cpp
Normal file
229
src/Bindings/LuaTCPLink.cpp
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
|
||||||
|
// LuaTCPLink.cpp
|
||||||
|
|
||||||
|
// Implements the cLuaTCPLink class representing a Lua wrapper for the cTCPLink class and the callbacks it needs
|
||||||
|
|
||||||
|
#include "Globals.h"
|
||||||
|
#include "LuaTCPLink.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cLuaTCPLink::cLuaTCPLink(cPluginLua & a_Plugin, int a_CallbacksTableStackPos):
|
||||||
|
m_Plugin(a_Plugin),
|
||||||
|
m_Callbacks(a_Plugin.GetLuaState(), a_CallbacksTableStackPos)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cLuaTCPLink::Send(const AString & a_Data)
|
||||||
|
{
|
||||||
|
// Safely grab a copy of the link:
|
||||||
|
cTCPLinkPtr Link = m_Link;
|
||||||
|
if (Link == nullptr)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send the data:
|
||||||
|
return Link->Send(a_Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AString cLuaTCPLink::GetLocalIP(void) const
|
||||||
|
{
|
||||||
|
// Safely grab a copy of the link:
|
||||||
|
cTCPLinkPtr Link = m_Link;
|
||||||
|
if (Link == nullptr)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the IP address:
|
||||||
|
return Link->GetLocalIP();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UInt16 cLuaTCPLink::GetLocalPort(void) const
|
||||||
|
{
|
||||||
|
// Safely grab a copy of the link:
|
||||||
|
cTCPLinkPtr Link = m_Link;
|
||||||
|
if (Link == nullptr)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the port:
|
||||||
|
return Link->GetLocalPort();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AString cLuaTCPLink::GetRemoteIP(void) const
|
||||||
|
{
|
||||||
|
// Safely grab a copy of the link:
|
||||||
|
cTCPLinkPtr Link = m_Link;
|
||||||
|
if (Link == nullptr)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the IP address:
|
||||||
|
return Link->GetRemoteIP();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UInt16 cLuaTCPLink::GetRemotePort(void) const
|
||||||
|
{
|
||||||
|
// Safely grab a copy of the link:
|
||||||
|
cTCPLinkPtr Link = m_Link;
|
||||||
|
if (Link == nullptr)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the port:
|
||||||
|
return Link->GetRemotePort();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cLuaTCPLink::Shutdown(void)
|
||||||
|
{
|
||||||
|
// Safely grab a copy of the link:
|
||||||
|
cTCPLinkPtr Link = m_Link;
|
||||||
|
if (Link == nullptr)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shutdown:
|
||||||
|
Link->Shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cLuaTCPLink::Close(void)
|
||||||
|
{
|
||||||
|
// Safely grab a copy of the link:
|
||||||
|
cTCPLinkPtr Link = m_Link;
|
||||||
|
if (Link == nullptr)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the link:
|
||||||
|
Link->Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cLuaTCPLink::OnConnected(cTCPLink & a_Link)
|
||||||
|
{
|
||||||
|
// Check if we're still valid:
|
||||||
|
if (!m_Callbacks.IsValid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call the callback:
|
||||||
|
cPluginLua::cOperation Op(m_Plugin);
|
||||||
|
if (!Op().Call(cLuaState::cTableRef(m_Callbacks, "OnConnected"), this))
|
||||||
|
{
|
||||||
|
LOGINFO("cTCPLink OnConnected() callback failed in plugin %s.", m_Plugin.GetName().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cLuaTCPLink::OnError(int a_ErrorCode, const AString & a_ErrorMsg)
|
||||||
|
{
|
||||||
|
// Check if we're still valid:
|
||||||
|
if (!m_Callbacks.IsValid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call the callback:
|
||||||
|
cPluginLua::cOperation Op(m_Plugin);
|
||||||
|
if (!Op().Call(cLuaState::cTableRef(m_Callbacks, "OnError"), this, a_ErrorCode, a_ErrorMsg))
|
||||||
|
{
|
||||||
|
LOGINFO("cTCPLink OnError() callback failed in plugin %s; the link error is %d (%s).",
|
||||||
|
m_Plugin.GetName().c_str(), a_ErrorCode, a_ErrorMsg.c_str()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cLuaTCPLink::OnLinkCreated(cTCPLinkPtr a_Link)
|
||||||
|
{
|
||||||
|
// Store the cTCPLink for later use:
|
||||||
|
m_Link = a_Link;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cLuaTCPLink::OnReceivedData(const char * a_Data, size_t a_Length)
|
||||||
|
{
|
||||||
|
// Check if we're still valid:
|
||||||
|
if (!m_Callbacks.IsValid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call the callback:
|
||||||
|
cPluginLua::cOperation Op(m_Plugin);
|
||||||
|
if (!Op().Call(cLuaState::cTableRef(m_Callbacks, "OnReceivedData"), this, AString(a_Data, a_Length)))
|
||||||
|
{
|
||||||
|
LOGINFO("cTCPLink OnReceivedData callback failed in plugin %s.", m_Plugin.GetName().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cLuaTCPLink::OnRemoteClosed(void)
|
||||||
|
{
|
||||||
|
// Check if we're still valid:
|
||||||
|
if (!m_Callbacks.IsValid())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call the callback:
|
||||||
|
cPluginLua::cOperation Op(m_Plugin);
|
||||||
|
if (!Op().Call(cLuaState::cTableRef(m_Callbacks, "OnRemoteClosed"), this))
|
||||||
|
{
|
||||||
|
LOGINFO("cTCPLink OnRemoteClosed() callback failed in plugin %s.", m_Plugin.GetName().c_str());
|
||||||
|
}
|
||||||
|
m_Link.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
77
src/Bindings/LuaTCPLink.h
Normal file
77
src/Bindings/LuaTCPLink.h
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
|
||||||
|
// 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
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -256,7 +256,7 @@ static int tolua_Base64Decode(lua_State * tolua_S)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static cPluginLua * GetLuaPlugin(lua_State * L)
|
cPluginLua * GetLuaPlugin(lua_State * L)
|
||||||
{
|
{
|
||||||
// Get the plugin identification out of LuaState:
|
// Get the plugin identification out of LuaState:
|
||||||
lua_getglobal(L, LUA_PLUGIN_INSTANCE_VAR_NAME);
|
lua_getglobal(L, LUA_PLUGIN_INSTANCE_VAR_NAME);
|
||||||
@ -3556,6 +3556,7 @@ void ManualBindings::Bind(lua_State * tolua_S)
|
|||||||
tolua_function(tolua_S, "md5", tolua_md5);
|
tolua_function(tolua_S, "md5", tolua_md5);
|
||||||
|
|
||||||
BindRankManager(tolua_S);
|
BindRankManager(tolua_S);
|
||||||
|
BindNetwork(tolua_S);
|
||||||
|
|
||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
struct lua_State;
|
struct lua_State;
|
||||||
|
class cPluginLua;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -17,8 +18,17 @@ protected:
|
|||||||
/** Binds the manually implemented cRankManager glue code to tolua_S.
|
/** Binds the manually implemented cRankManager glue code to tolua_S.
|
||||||
Implemented in ManualBindings_RankManager.cpp. */
|
Implemented in ManualBindings_RankManager.cpp. */
|
||||||
static void BindRankManager(lua_State * tolua_S);
|
static void BindRankManager(lua_State * tolua_S);
|
||||||
|
|
||||||
|
/** Binds the manually implemented cNetwork-related API to tolua_S.
|
||||||
|
Implemented in ManualBindings_Network.cpp. */
|
||||||
|
static void BindNetwork(lua_State * tolua_S);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern cPluginLua * GetLuaPlugin(lua_State * L);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
279
src/Bindings/ManualBindings_Network.cpp
Normal file
279
src/Bindings/ManualBindings_Network.cpp
Normal file
@ -0,0 +1,279 @@
|
|||||||
|
|
||||||
|
// ManualBindings_Network.cpp
|
||||||
|
|
||||||
|
// Implements the cNetwork-related API bindings for Lua
|
||||||
|
|
||||||
|
#include "Globals.h"
|
||||||
|
#include "LuaTCPLink.h"
|
||||||
|
#include "ManualBindings.h"
|
||||||
|
#include "tolua++/include/tolua++.h"
|
||||||
|
#include "LuaState.h"
|
||||||
|
#include "LuaTCPLink.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// cNetwork API functions:
|
||||||
|
|
||||||
|
/** Binds cNetwork::Connect */
|
||||||
|
static int tolua_cNetwork_Connect(lua_State * L)
|
||||||
|
{
|
||||||
|
// Function signature:
|
||||||
|
// cNetwork:Connect(Host, Port, Callbacks) -> bool
|
||||||
|
|
||||||
|
cLuaState S(L);
|
||||||
|
if (
|
||||||
|
!S.CheckParamUserTable(1, "cNetwork") ||
|
||||||
|
!S.CheckParamString(2) ||
|
||||||
|
!S.CheckParamNumber(3) ||
|
||||||
|
!S.CheckParamTable(4) ||
|
||||||
|
!S.CheckParamEnd(5)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the plugin instance:
|
||||||
|
cPluginLua * Plugin = GetLuaPlugin(L);
|
||||||
|
if (Plugin == nullptr)
|
||||||
|
{
|
||||||
|
// An error message has been already printed in GetLuaPlugin()
|
||||||
|
S.Push(false);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the params:
|
||||||
|
AString Host;
|
||||||
|
int Port;
|
||||||
|
S.GetStackValues(2, Host, Port);
|
||||||
|
|
||||||
|
// Check validity:
|
||||||
|
if ((Port < 0) || (Port > 65535))
|
||||||
|
{
|
||||||
|
LOGWARNING("cNetwork:Connect() called with invalid port (%d), failing the request.", Port);
|
||||||
|
S.Push(false);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the LuaTCPLink glue class:
|
||||||
|
auto Link = std::make_shared<cLuaTCPLink>(*Plugin, 4);
|
||||||
|
|
||||||
|
// Try to connect:
|
||||||
|
bool res = cNetwork::Connect(Host, static_cast<UInt16>(Port), Link, Link);
|
||||||
|
S.Push(res);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// cTCPLink bindings (routed through cLuaTCPLink):
|
||||||
|
|
||||||
|
static int tolua_cTCPLink_Send(lua_State * L)
|
||||||
|
{
|
||||||
|
// Function signature:
|
||||||
|
// LinkInstance:Send(DataString) -> bool
|
||||||
|
|
||||||
|
cLuaState S(L);
|
||||||
|
if (
|
||||||
|
!S.CheckParamUserType(1, "cTCPLink") ||
|
||||||
|
!S.CheckParamString(2) ||
|
||||||
|
!S.CheckParamEnd(3)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the link:
|
||||||
|
cLuaTCPLink * Link;
|
||||||
|
if (lua_isnil(L, 1))
|
||||||
|
{
|
||||||
|
LOGWARNING("cTCPLink:Send(): invalid link object. Stack trace:");
|
||||||
|
S.LogStackTrace();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Link = *static_cast<cLuaTCPLink **>(lua_touserdata(L, 1));
|
||||||
|
|
||||||
|
// Get the data to send:
|
||||||
|
AString Data;
|
||||||
|
S.GetStackValues(2, Data);
|
||||||
|
|
||||||
|
// Send the data:
|
||||||
|
Link->Send(Data);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int tolua_cTCPLink_GetLocalIP(lua_State * L)
|
||||||
|
{
|
||||||
|
// Function signature:
|
||||||
|
// LinkInstance:GetLocalIP() -> string
|
||||||
|
|
||||||
|
cLuaState S(L);
|
||||||
|
if (
|
||||||
|
!S.CheckParamUserType(1, "cTCPLink") ||
|
||||||
|
!S.CheckParamEnd(2)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the link:
|
||||||
|
cLuaTCPLink * Link;
|
||||||
|
if (lua_isnil(L, 1))
|
||||||
|
{
|
||||||
|
LOGWARNING("cTCPLink:GetLocalIP(): invalid link object. Stack trace:");
|
||||||
|
S.LogStackTrace();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Link = *static_cast<cLuaTCPLink **>(lua_touserdata(L, 1));
|
||||||
|
|
||||||
|
// Get the IP:
|
||||||
|
S.Push(Link->GetLocalIP());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int tolua_cTCPLink_GetLocalPort(lua_State * L)
|
||||||
|
{
|
||||||
|
// Function signature:
|
||||||
|
// LinkInstance:GetLocalPort() -> number
|
||||||
|
|
||||||
|
cLuaState S(L);
|
||||||
|
if (
|
||||||
|
!S.CheckParamUserType(1, "cTCPLink") ||
|
||||||
|
!S.CheckParamEnd(2)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the link:
|
||||||
|
cLuaTCPLink * Link;
|
||||||
|
if (lua_isnil(L, 1))
|
||||||
|
{
|
||||||
|
LOGWARNING("cTCPLink:GetLocalPort(): invalid link object. Stack trace:");
|
||||||
|
S.LogStackTrace();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Link = *static_cast<cLuaTCPLink **>(lua_touserdata(L, 1));
|
||||||
|
|
||||||
|
// Get the Port:
|
||||||
|
S.Push(Link->GetLocalPort());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int tolua_cTCPLink_GetRemoteIP(lua_State * L)
|
||||||
|
{
|
||||||
|
// Function signature:
|
||||||
|
// LinkInstance:GetRemoteIP() -> string
|
||||||
|
|
||||||
|
cLuaState S(L);
|
||||||
|
if (
|
||||||
|
!S.CheckParamUserType(1, "cTCPLink") ||
|
||||||
|
!S.CheckParamEnd(2)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the link:
|
||||||
|
cLuaTCPLink * Link;
|
||||||
|
if (lua_isnil(L, 1))
|
||||||
|
{
|
||||||
|
LOGWARNING("cTCPLink:GetRemoteIP(): invalid link object. Stack trace:");
|
||||||
|
S.LogStackTrace();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Link = *static_cast<cLuaTCPLink **>(lua_touserdata(L, 1));
|
||||||
|
|
||||||
|
// Get the IP:
|
||||||
|
S.Push(Link->GetRemoteIP());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int tolua_cTCPLink_GetRemotePort(lua_State * L)
|
||||||
|
{
|
||||||
|
// Function signature:
|
||||||
|
// LinkInstance:GetRemotePort() -> number
|
||||||
|
|
||||||
|
cLuaState S(L);
|
||||||
|
if (
|
||||||
|
!S.CheckParamUserType(1, "cTCPLink") ||
|
||||||
|
!S.CheckParamEnd(2)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the link:
|
||||||
|
cLuaTCPLink * Link;
|
||||||
|
if (lua_isnil(L, 1))
|
||||||
|
{
|
||||||
|
LOGWARNING("cTCPLink:GetRemotePort(): invalid link object. Stack trace:");
|
||||||
|
S.LogStackTrace();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Link = *static_cast<cLuaTCPLink **>(lua_touserdata(L, 1));
|
||||||
|
|
||||||
|
// Get the Port:
|
||||||
|
S.Push(Link->GetRemotePort());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Register the bindings:
|
||||||
|
|
||||||
|
void ManualBindings::BindNetwork(lua_State * tolua_S)
|
||||||
|
{
|
||||||
|
// Create the cNetwork API classes:
|
||||||
|
tolua_usertype(tolua_S, "cNetwork");
|
||||||
|
tolua_cclass(tolua_S, "cNetwork", "cNetwork", "", nullptr);
|
||||||
|
tolua_usertype(tolua_S, "cTCPLink");
|
||||||
|
tolua_cclass(tolua_S, "cTCPLink", "cTCPLink", "", nullptr);
|
||||||
|
|
||||||
|
// Fill in the functions (alpha-sorted):
|
||||||
|
tolua_beginmodule(tolua_S, "cNetwork");
|
||||||
|
tolua_function(tolua_S, "Connect", tolua_cNetwork_Connect);
|
||||||
|
/*
|
||||||
|
tolua_function(tolua_S, "HostnameToIP", tolua_cNetwork_HostnameToIP);
|
||||||
|
tolua_function(tolua_S, "IPToHostname", tolua_cNetwork_IPToHostname);
|
||||||
|
tolua_function(tolua_S, "Listen", tolua_cNetwork_Listen);
|
||||||
|
*/
|
||||||
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
|
tolua_beginmodule(tolua_S, "cTCPLink");
|
||||||
|
tolua_function(tolua_S, "Send", tolua_cTCPLink_Send);
|
||||||
|
tolua_function(tolua_S, "GetLocalIP", tolua_cTCPLink_GetLocalIP);
|
||||||
|
tolua_function(tolua_S, "GetLocalPort", tolua_cTCPLink_GetLocalPort);
|
||||||
|
tolua_function(tolua_S, "GetRemoteIP", tolua_cTCPLink_GetRemoteIP);
|
||||||
|
tolua_function(tolua_S, "GetRemotePort", tolua_cTCPLink_GetRemotePort);
|
||||||
|
tolua_endmodule(tolua_S);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user