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.  * via writeUTF
  39.  *
  40.  * @author Manuel Mausz (0728348)
  41.  */
  42. public class CommandNetwork
  43. {
  44. private boolean stop = false;
  45. private boolean onecommand = false;
  46. public CommandHandler cmdHandler;
  47.  
  48. /*--------------------------------------------------------------------------*/
  49.  
  50. public CommandNetwork()
  51. {
  52. cmdHandler = new CommandHandler();
  53. }
  54.  
  55. /*--------------------------------------------------------------------------*/
  56.  
  57. public void setOneCommandMode(boolean mode)
  58. {
  59. onecommand = mode;
  60. }
  61.  
  62. /*--------------------------------------------------------------------------*/
  63.  
  64. public void stop()
  65. {
  66. stop = true;
  67. }
  68.  
  69. /*--------------------------------------------------------------------------*/
  70.  
  71. public void printPrompt()
  72. {}
  73.  
  74. /*--------------------------------------------------------------------------*/
  75.  
  76. public void run(ObjectInputStream in)
  77. throws IOException
  78. {
  79. String input;
  80.  
  81. printPrompt();
  82. while(!stop && (input = in.readUTF()) != 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.