Download | Plain Text | No Line Numbers


  1. /*
  2.  * Copyright (c) 2010, Manuel Mausz. All rights reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without
  5.  * modification, are permitted provided that the following conditions
  6.  * are met:
  7.  *
  8.  * - Redistributions of source code must retain the above copyright
  9.  * notice, this list of conditions and the following disclaimer.
  10.  *
  11.  * - Redistributions in binary form must reproduce the above copyright
  12.  * notice, this list of conditions and the following disclaimer in the
  13.  * documentation and/or other materials provided with the distribution.
  14.  *
  15.  * - The names of the authors may not be used to endorse or promote products
  16.  * derived from this software without specific prior written permission.
  17.  *
  18.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  19.  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  20.  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  21.  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  22.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  23.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  24.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  25.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  26.  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  27.  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  28.  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29.  */
  30.  
  31. import java.io.ObjectInputStream;
  32. import java.io.IOException;
  33.  
  34. /*
  35.  * Allows you to easily setup a application which receive commands via network
  36.  * Register commands in ctor and invoke run() afterwards
  37.  * Reads from ObjectInputStream. Commands must be send by ObjectOutputstream
  38.  *
  39.  * @author Manuel Mausz (0728348)
  40.  */
  41. public class CommandNetwork
  42. {
  43. private boolean stop = false;
  44. private boolean onecommand = false;
  45. public CommandHandler cmdHandler;
  46.  
  47. /*--------------------------------------------------------------------------*/
  48.  
  49. public CommandNetwork()
  50. {
  51. cmdHandler = new CommandHandler();
  52. }
  53.  
  54. /*--------------------------------------------------------------------------*/
  55.  
  56. public void setOneCommandMode(boolean mode)
  57. {
  58. onecommand = mode;
  59. }
  60.  
  61. /*--------------------------------------------------------------------------*/
  62.  
  63. public void stop()
  64. {
  65. stop = true;
  66. }
  67.  
  68. /*--------------------------------------------------------------------------*/
  69.  
  70. public void printPrompt()
  71. {}
  72.  
  73. /*--------------------------------------------------------------------------*/
  74.  
  75. @SuppressWarnings("deprecation")
  76. public void run(ObjectInputStream in)
  77. throws IOException
  78. {
  79. String input;
  80.  
  81. printPrompt();
  82. while(!stop && (input = in.readLine()) != null)
  83. {
  84. if (input.length() > 0)
  85. {
  86. String[] pieces = input.split("\\s+");
  87. String[] args = new String[pieces.length - 1];
  88. System.arraycopy(pieces, 1, args, 0, pieces.length - 1);
  89. cmdHandler.call(pieces[0], args);
  90. }
  91.  
  92. if (onecommand)
  93. break;
  94.  
  95. if (!stop)
  96. printPrompt();
  97. }
  98. }
  99. }
  100.