diff options
author | snowleo <schneeleo@gmail.com> | 2011-10-12 03:14:07 +0200 |
---|---|---|
committer | snowleo <schneeleo@gmail.com> | 2011-10-12 03:14:26 +0200 |
commit | 860d446d28776ec842fa53e8e08538d4e093d6e9 (patch) | |
tree | 0c4598eae4eb8c59fd36e8312eab1b27a8018794 /EssentialsUpdate/src/f00f/net/irc/martyr/commands/QuitCommand.java | |
parent | 9ec398b39b0f48392a9d635041b392c7dba2ca0c (diff) | |
download | Essentials-860d446d28776ec842fa53e8e08538d4e093d6e9.tar Essentials-860d446d28776ec842fa53e8e08538d4e093d6e9.tar.gz Essentials-860d446d28776ec842fa53e8e08538d4e093d6e9.tar.lz Essentials-860d446d28776ec842fa53e8e08538d4e093d6e9.tar.xz Essentials-860d446d28776ec842fa53e8e08538d4e093d6e9.zip |
EssentialsUpdate WIP
Diffstat (limited to 'EssentialsUpdate/src/f00f/net/irc/martyr/commands/QuitCommand.java')
-rw-r--r-- | EssentialsUpdate/src/f00f/net/irc/martyr/commands/QuitCommand.java | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/EssentialsUpdate/src/f00f/net/irc/martyr/commands/QuitCommand.java b/EssentialsUpdate/src/f00f/net/irc/martyr/commands/QuitCommand.java new file mode 100644 index 000000000..e12a2520d --- /dev/null +++ b/EssentialsUpdate/src/f00f/net/irc/martyr/commands/QuitCommand.java @@ -0,0 +1,132 @@ +package f00f.net.irc.martyr.commands; + +import java.util.Enumeration; + +import f00f.net.irc.martyr.InCommand; +import f00f.net.irc.martyr.clientstate.Channel; +import f00f.net.irc.martyr.clientstate.ClientState; +import f00f.net.irc.martyr.util.FullNick; + +/** + * <p>Defines QUIT command. The QUIT command asks the irc server to + * disconnect us, and we can optionally give a reason. The QUIT + * command is also received by us if someone on a channel we are on + * quits.</p> + * + * <p>What should be done to signal to the framework that the + * disconnection that should come from the server is legit, and we + * shouldn't try to re-connecet? For now it will be assumed that the + * user of the framework will signal all the appropriate classes that + * a legit disconnection will happen (ie AutoRegister which will try + * to re-connect otherwise).</p> + */ +public class QuitCommand extends AbstractCommand +{ + //static Logger log = Logger.getLogger(QuitCommand.class); + + private String reason; + private FullNick user; + + /** For use as a factory */ + public QuitCommand() + { + this( null, null ); + } + + /** + * For use as an incoming command. + * + * @param user User that has quit + * @param reason Specified reason for quitting + */ + public QuitCommand( FullNick user, String reason ) + { + this.user = user; + this.reason = reason; + } + + /** + * For use as an outgoing command. + * + * @param reason Specified reason for quitting + */ + public QuitCommand( String reason ) + { + this( null, reason ); + } + + public InCommand parse( String prefix, String identifier, String params ) + { + return new QuitCommand( new FullNick( prefix ), getParameter( params, 0 ) ); + } + + public String getIrcIdentifier() + { + return "QUIT"; + } + + public String renderParams() + { + return ":" + reason; + } + + public String getReason() + { + return reason; + } + + public FullNick getUser() + { + return user; + } + + /** + * Returns true if we are the ones quitting. + * + * @param state Client state we are checking against + * @return True or false if the quit is us quitting + */ + public boolean isOurQuit( ClientState state ) + { + return user.equals( state.getNick() ); + } + + /** If we are quitting, we won't be worrying about our client state. + * If someone else is leaving, then remove them from all the groups + * they are in. + */ + public boolean updateClientState( ClientState state ) + { + //log.debug( "Nick: " + state.getNick().toString() ); + if( isOurQuit(state) ) + { + // We've quit + //log.debug("QUIT: We've quit: " + reason); + + // What should we do with the client state here? + return true; + } + else + { + // Someone else quit. We need to remove them from each group + // they are in. + //log.debug("QUIT: " + user + " quit: " + reason); + + // 1) Grab channels + Enumeration channelNames = state.getChannelNames(); + while( channelNames.hasMoreElements() ) + { + String chanName = channelNames.nextElement().toString(); + + // 2) Remove from group. + Channel channelObj = state.getChannel( chanName); + channelObj.removeMember( user, this ); + } + + return true; + } + } + +} + + |