File Source: Process001.java

         /* 
    P/P   *  Method: com.dmdirc.parser.irc.Process001__static_init
          */
     1  /*
     2   * Copyright (c) 2006-2009 Chris Smith, Shane Mc Cormack, Gregory Holmes
     3   *
     4   * Permission is hereby granted, free of charge, to any person obtaining a copy
     5   * of this software and associated documentation files (the "Software"), to deal
     6   * in the Software without restriction, including without limitation the rights
     7   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     8   * copies of the Software, and to permit persons to whom the Software is
     9   * furnished to do so, subject to the following conditions:
    10   *
    11   * The above copyright notice and this permission notice shall be included in
    12   * all copies or substantial portions of the Software.
    13   *
    14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    20   * SOFTWARE.
    21   */
    22  
    23  package com.dmdirc.parser.irc;
    24  
    25  /**
    26   * Process a 001 message.
    27   */
    28  public class Process001 extends IRCProcessor {
    29  	/**
    30  	 * Process a 001 message.
    31  	 *
    32  	 * @param sParam Type of line to process ("001")
    33  	 * @param token IRCTokenised line to process
    34  	 */
    35  	@Override
    36  	public void process(final String sParam, final String[] token) {
        		 /* 
    P/P 		  *  Method: void process(String, String[])
        		  * 
        		  *  Preconditions:
        		  *    init'ed(this.myParser.cMyself.bIsFake)
        		  *    init'ed(this.myParser.pingTimer)
        		  *    this.myParser != null
        		  *    this.myParser.cMyself != null
        		  *    this.myParser.pingNeeded != null
        		  *    init'ed(this.myParser.pingTimerLength)
        		  *    this.myParser.pingTimerSem != null
        		  *    token != null
        		  *    token.length >= 3
        		  *    token[0] != null
        		  *    ...
        		  * 
        		  *  Presumptions:
        		  *    this.myParser.stringConverter.lowercase@52 != null
        		  *    this.myParser.stringConverter.lowercase@56 != null
        		  * 
        		  *  Postconditions:
        		  *    java.lang.String:substring(...)._tainted == token[0]._tainted
        		  *    init'ed(java.lang.String:substring(...)._tainted)
        		  *    this.myParser.cMyself.bIsFake == 0
        		  *    this.myParser.cMyself.sHost == One-of{&"", undefined, old this.myParser.cMyself.sHost}
        		  *    this.myParser.cMyself.sIdent == One-of{&"", undefined, old this.myParser.cMyself.sIdent}
        		  *    this.myParser.cMyself.sNickname == One-of{undefined, old this.myParser.cMyself.sNickname}
        		  *    this.myParser.got001 == 1
        		  *    this.myParser.pingCountDown == 1
        		  *    new Timer(startPingTimer#1) num objects == 1
        		  *    this.myParser.pingTimer == &new Timer(startPingTimer#1)
        		  *    ...
        		  * 
        		  *  Test Vectors:
        		  *    this.myParser.cMyself.bIsFake: {0}, {1}
        		  *    java.lang.String:equalsIgnoreCase(...)@50: {1}, {0}
        		  */
    37  		myParser.got001 = true;
    38  		// << :demon1.uk.quakenet.org 001 Java-Test :Welcome to the QuakeNet IRC Network, Java-Test
    39  		myParser.sServerName = token[0].substring(1,token[0].length());
    40  		final String sNick = token[2];
    41  				
    42  		// myself will be fake if we havn't recieved a 001 yet
    43  		if (myParser.getMyself().isFake()) {
    44  			// Update stored information
    45  			myParser.getMyself().setUserBits(sNick, true, true);
    46  			myParser.getMyself().setFake(false);
    47  			myParser.addClient(myParser.getMyself());
    48  		} else {
    49  			// Another 001? if nicknames change then we need to update the hashtable
    50  			if (!myParser.getMyself().getNickname().equalsIgnoreCase(sNick)) {
    51  				// Nick changed, remove old me
    52  				myParser.forceRemoveClient(myParser.getMyself());
    53  				/// Update stored information
    54  				myParser.getMyself().setUserBits(sNick, true, true);
    55  				// Check that we don't already know someone by this name
    56  				if (myParser.getClientInfo(myParser.getMyself().getNickname()) == null) {
    57  					// And add to list
    58  					myParser.addClient(myParser.getMyself());
    59  				} else {
    60  					// Someone else already know? this is bad!
    61  					myParser.callErrorInfo(new ParserError(ParserError.ERROR_FATAL, "001 overwrites existing client?", myParser.getLastLine()));
    62  				}
    63  			}
    64  		}
    65  		
    66  		callServerReady();
    67  		myParser.startPingTimer();
    68  	}
    69  	
    70  	/**
    71  	 * Callback to all objects implementing the ServerReady Callback.
    72  	 *
    73  	 * @see IServerReady
    74  	 * @return true if a method was called, false otherwise
    75  	 */	
    76  	protected boolean callServerReady() {
        		 /* 
    P/P 		  *  Method: bool callServerReady()
        		  * 
        		  *  Preconditions:
        		  *    this.myParser != null
        		  *    this.myParser.myCallbackManager != null
        		  *    this.myParser.myCallbackManager.callbackHash != null
        		  * 
        		  *  Presumptions:
        		  *    getCallbackManager(...)@77 init'ed
        		  * 
        		  *  Postconditions:
        		  *    init'ed(return_value)
        		  */
    77  		return getCallbackManager().getCallbackType("OnServerReady").call();
    78  	}
    79  	
    80  	/**
    81  	 * What does this IRCProcessor handle.
    82  	 *
    83  	 * @return String[] with the names of the tokens we handle.
    84  	 */
    85  	@Override
    86  	public String[] handles() {
        		 /* 
    P/P 		  *  Method: String[] handles()
        		  * 
        		  *  Postconditions:
        		  *    return_value == &amp;new String[](handles#1)
        		  *    new String[](handles#1) num objects == 1
        		  *    return_value.length == 1
        		  *    return_value[0] == &amp;"001"
        		  */
    87  		return new String[]{"001"};
    88  	} 
    89  	
    90  	/**
    91  	 * Create a new instance of the IRCProcessor Object.
    92  	 *
    93  	 * @param parser IRCParser That owns this IRCProcessor
    94  	 * @param manager ProcessingManager that is in charge of this IRCProcessor
    95  	 */
        	 /* 
    P/P 	  *  Method: void com.dmdirc.parser.irc.Process001(IRCParser, ProcessingManager)
        	  * 
        	  *  Postconditions:
        	  *    this.myManager == manager
        	  *    init'ed(this.myManager)
        	  *    this.myParser == parser
        	  *    init'ed(this.myParser)
        	  */
    96  	protected Process001 (IRCParser parser, ProcessingManager manager) { super(parser, manager); }
    97  
    98  }








SofCheck Inspector Build Version : 2.17854
Process001.java 2009-Jun-25 01:54:24
Process001.class 2009-Sep-02 17:04:16