<?xml Version="1.0" encoding="UTF-8"?>
<!DOCTYPE muclient [
  <!ENTITY interval "10" >
  <!ENTITY quit_command "quit" >
  <!ENTITY Connect_command "connect" >
  <!ENTITY noconnect_command "NOCONNECT" >
]>

<!-- Plugin "Reconnecter" generated by Plugin Wizard -->

<!--
1. Change the entity above "interval" to be the number of seconds
between retries.

2. Change the entity above "quit_command" to be the command you
type to quit (eg. quit, QUIT, @quit or whatever)

3. Change the entity above "Connect_command" to be the command you
type to enable connection checking.

4. Change the entity above "noconnect_command" to be the command you
type to disable connection checking.

-->

<muclient>
<plugin
   name="Reconnecter"
   author="Nick Gammon"
   id="dc8cb4a314674db813c12c90"
   language="Lua"
   purpose="Reconnects when disconnected"
   date_written="2007-12-12 11:30:00"
   requires="3.80"
   version="2.0"
   >
<description Trim="y">
<![CDATA[
This plugin will automatically reconnect you when you are disconnected, at a user-configurable interval (say, every 5 seconds)
]]>

Reconnecter:Help - this Help screen

&Connect_command;  - enable recconnection (eg. after using &noconnect_command;)

&noconnect_command; - disable reconnection (eg. if you are leaving the PC)

</description>

</plugin>


<!--  Timers  -->

<timers>
  <timer name="ConnectCheckTimer" 
         script="OnConnectCheckTimer" 
         second="&interval;" 
         active_closed="y" 
         enabled="y">

  </timer>
</timers>

<!--  Aliases  -->

<aliases>
  <alias
   script="OnQuit"
   match="&quit_command;"
   enabled="y"
  >
  </alias>

  <alias
   script="OnConnect"
   match="&Connect_command;"
   enabled="y"
  >
  </alias>
  <alias
   script="OnNoConnect"
   match="&noconnect_command;"
   enabled="y"
  >
  </alias>
</aliases>

<!--  Script  -->


<script>
<![CDATA[
local retry, did_quit

retry = 0  -- retry count
did_quit = false

function OnConnectCheckTimer (sName)
  
  --
  --  If currently connecting, leave it to do that ...
  --
  
  if GetInfo (107) then 
    return
  end -- if
  
  
  --
  --  If currently connected, we don't need to check any more
  --
  
  if IsConnected () then
    Note "World is connected, disabling disconnection check"
    EnableTimer (sName, false)
    return
  end -- if
  
  --
  --  If deliberate quit, we don't need to check any more
  --
  if did_quit then
    Note "Deliberate quit, disabling disconnection check"
    EnableTimer (sName, false)
    return
  end -- if
  
  --
  --  OK, we need to Connect now ...
  --
  
  retry = retry + 1
  
  Note ("Connecting to world, attempt # " .. retry)
  Connect ()

end -- function

function OnPluginDisconnect ()
  --
  --  If deliberate quit, we don't need to enable the connection check
  --
  
  if did_quit then  
    return
  end -- if
  
  --
  --  We have been disconnected, we need to try connecting again
  --

  Note "Connection checker enabled"
  EnableTimer ("ConnectCheckTimer", true)
  
end -- function

function OnPluginConnect ()
  
  --
  --  Now we are connected, no need to keep trying to Connect
  --
  
  retry = 0
  EnableTimer ("ConnectCheckTimer", false)
  
  --
  --  No deliberate quit yet
  --
  
  did_quit = false
    
end -- function

function OnPluginInstall ()
  DoAfterNote (1, "Connection checker installed.")
end -- function

]]>

function OnQuit (sName, sLine, wildcards)
  did_quit = true
  Send ("&quit_command;") --  Send to world so it does it
  Note "Deliberate quit (&quit_command;), reconnect disabled"
end -- function

function OnConnect (sName, sLine, wildcards)
  Note "Connection checker enabled"
  EnableTimer ("ConnectCheckTimer", true)
  did_quit = false
end -- function

function OnNoConnect (sName, sLine, wildcards)
  Note "Connection checker disabled"
  EnableTimer ("ConnectCheckTimer", false)
  did_quit = true
end -- function


</script>


<!--  Plugin Help  -->

<aliases>
  <alias
   script="OnHelp"
   match="Reconnecter:Help"
   enabled="y"
  >
  </alias>
</aliases>

<script>
<![CDATA[
function OnHelp (sName, sLine, wildcards)
  Note (GetPluginInfo (GetPluginID, 3))
end -- function
]]>
</script> 

</muclient>
