diff options
author | daniel0916 <theschokolps@gmail.com> | 2014-04-19 20:56:29 +0200 |
---|---|---|
committer | daniel0916 <theschokolps@gmail.com> | 2014-04-19 20:56:29 +0200 |
commit | cb90029f720d867ba6398569c1b1dac2ee76e205 (patch) | |
tree | d16ea187d087b1e91c5136d349b66aafad02d7d6 /MCServer/Plugins/APIDump/WebWorldThreads.html | |
parent | Fixed Code (2) (diff) | |
parent | APIDump: Added a ChunkStay article. (diff) | |
download | cuberite-cb90029f720d867ba6398569c1b1dac2ee76e205.tar cuberite-cb90029f720d867ba6398569c1b1dac2ee76e205.tar.gz cuberite-cb90029f720d867ba6398569c1b1dac2ee76e205.tar.bz2 cuberite-cb90029f720d867ba6398569c1b1dac2ee76e205.tar.lz cuberite-cb90029f720d867ba6398569c1b1dac2ee76e205.tar.xz cuberite-cb90029f720d867ba6398569c1b1dac2ee76e205.tar.zst cuberite-cb90029f720d867ba6398569c1b1dac2ee76e205.zip |
Diffstat (limited to 'MCServer/Plugins/APIDump/WebWorldThreads.html')
-rw-r--r-- | MCServer/Plugins/APIDump/WebWorldThreads.html | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/MCServer/Plugins/APIDump/WebWorldThreads.html b/MCServer/Plugins/APIDump/WebWorldThreads.html index fc80a6178..ee0b172e6 100644 --- a/MCServer/Plugins/APIDump/WebWorldThreads.html +++ b/MCServer/Plugins/APIDump/WebWorldThreads.html @@ -39,31 +39,31 @@ <h2>Example</h2> The Core has the facility to kick players using the web interface. It used the following code for the kicking (inside the webadmin handler): - <pre class="prettyprint lang-lua"> - local KickPlayerName = Request.Params["players-kick"] - local FoundPlayerCallback = function(Player) - if (Player:GetName() == KickPlayerName) then - Player:GetClientHandle():Kick("You were kicked from the game!") - end +<pre class="prettyprint lang-lua"> +local KickPlayerName = Request.Params["players-kick"] +local FoundPlayerCallback = function(Player) + if (Player:GetName() == KickPlayerName) then + Player:GetClientHandle():Kick("You were kicked from the game!") + end +end +cRoot:Get():FindAndDoWithPlayer(KickPlayerName, FoundPlayerCallback) +</pre> +The cRoot:FindAndDoWithPlayer() is unsafe and could have caused a deadlock. The new solution is queue a task; but since we don't know in which world the player is, we need to queue the task to all worlds: +<pre class="prettyprint lang-lua"> +cRoot:Get():ForEachWorld( -- For each world... + function(World) + World:QueueTask( -- ... queue a task... + function(a_World) + a_World:DoWithPlayer(KickPlayerName, -- ... to walk the playerlist... + function (a_Player) + a_Player:GetClientHandle():Kick("You were kicked from the game!") -- ... and kick the player end - cRoot:Get():FindAndDoWithPlayer(KickPlayerName, FoundPlayerCallback) - </pre> - The cRoot:FindAndDoWithPlayer() is unsafe and could have caused a deadlock. The new solution is queue a task; but since we don't know in which world the player is, we need to queue the task to all worlds: - <pre class="prettyprint lang-lua"> - cRoot:Get():ForEachWorld( -- For each world... - function(World) - World:QueueTask( -- ... queue a task... - function(a_World) - a_World:DoWithPlayer(KickPlayerName, -- ... to walk the playerlist... - function (a_Player) - a_Player:GetClientHandle():Kick("You were kicked from the game!") -- ... and kick the player - end - ) - end - ) - end - ) - </pre> + ) + end + ) + end +) +</pre> <script> prettyPrint(); </script> |