@@ -33,9 +33,8 @@ int ModApiChannels::l_mod_channel_join(lua_State *L)
33
33
return 0 ;
34
34
35
35
getGameDef (L)->joinModChannel (channel);
36
- ModChannel *channelObj = getGameDef (L)->getModChannel (channel);
37
- assert (channelObj);
38
- ModChannelRef::create (L, channelObj);
36
+ assert (getGameDef (L)->getModChannel (channel) != nullptr );
37
+ ModChannelRef::create (L, channel);
39
38
40
39
int object = lua_gettop (L);
41
40
lua_pushvalue (L, object);
@@ -51,29 +50,22 @@ void ModApiChannels::Initialize(lua_State *L, int top)
51
50
* ModChannelRef
52
51
*/
53
52
54
- ModChannelRef::ModChannelRef (ModChannel *modchannel) : m_modchannel(modchannel)
53
+ ModChannelRef::ModChannelRef (const std::string &modchannel) :
54
+ m_modchannel_name(modchannel)
55
55
{
56
56
}
57
57
58
58
int ModChannelRef::l_leave (lua_State *L)
59
59
{
60
60
ModChannelRef *ref = checkobject (L, 1 );
61
- ModChannel *channel = getobject (ref);
62
- if (!channel)
63
- return 0 ;
64
-
65
- getGameDef (L)->leaveModChannel (channel->getName ());
66
- // Channel left, invalidate the channel object ptr
67
- // This permits to invalidate every object action from Lua because core removed
68
- // channel consuming link
69
- ref->m_modchannel = nullptr ;
61
+ getGameDef (L)->leaveModChannel (ref->m_modchannel_name );
70
62
return 0 ;
71
63
}
72
64
73
65
int ModChannelRef::l_send_all (lua_State *L)
74
66
{
75
67
ModChannelRef *ref = checkobject (L, 1 );
76
- ModChannel *channel = getobject (ref);
68
+ ModChannel *channel = getobject (L, ref);
77
69
if (!channel || !channel->canWrite ())
78
70
return 0 ;
79
71
@@ -87,7 +79,7 @@ int ModChannelRef::l_send_all(lua_State *L)
87
79
int ModChannelRef::l_is_writeable (lua_State *L)
88
80
{
89
81
ModChannelRef *ref = checkobject (L, 1 );
90
- ModChannel *channel = getobject (ref);
82
+ ModChannel *channel = getobject (L, ref);
91
83
if (!channel)
92
84
return 0 ;
93
85
@@ -119,7 +111,7 @@ void ModChannelRef::Register(lua_State *L)
119
111
lua_pop (L, 1 ); // Drop methodtable
120
112
}
121
113
122
- void ModChannelRef::create (lua_State *L, ModChannel * channel)
114
+ void ModChannelRef::create (lua_State *L, const std::string & channel)
123
115
{
124
116
ModChannelRef *o = new ModChannelRef (channel);
125
117
*(void **)(lua_newuserdata (L, sizeof (void *))) = o;
@@ -145,9 +137,9 @@ ModChannelRef *ModChannelRef::checkobject(lua_State *L, int narg)
145
137
return *(ModChannelRef **)ud; // unbox pointer
146
138
}
147
139
148
- ModChannel *ModChannelRef::getobject (ModChannelRef *ref)
140
+ ModChannel *ModChannelRef::getobject (lua_State *L, ModChannelRef *ref)
149
141
{
150
- return ref->m_modchannel ;
142
+ return getGameDef (L)-> getModChannel ( ref->m_modchannel_name ) ;
151
143
}
152
144
153
145
// clang-format off
0 commit comments