コード例 #1
0
 private boolean stranger(String myName) {
   // tty.println("=+= " + (myName.getBytes()[0])+" =" );
   // tty.println("=+= " + Character.isISOControl(myName.charAt(0)));
   if (Character.isISOControl(myName.charAt(0))) myName = "QUIT";
   if (myName.equals("QUIT")) {
     writeLine("! Thank you for coming!");
   }
   if (myName == null || myName.equals("QUIT")) {
     tty.println(" --- from " + remoteAddr + " at " + now.toString());
     return true;
   } // "QUIT" is not allowed as a nick name
   if (myName.equals(SECRET_NAME)) {
     tty.println("GiGi  from " + remoteAddr + " at " + now.toString());
     doList();
     return true;
   }
   return false; // a usual user name
 }
コード例 #2
0
  public void run() {
    now = new Date();
    try {
      remoteAddr = mySock.getInetAddress().getHostAddress();
      // 然後取得InputStream並包成 BufferedReader 方便 readLine()
      in = new BufferedReader(new InputStreamReader(mySock.getInputStream()));
      // 再取得 OutputStream 並包成 PrintWriter
      out = new PrintWriter(new OutputStreamWriter(mySock.getOutputStream()), true);
      // 接著, 要求連線者輸入 nickname
      myName = askNickname();
      // 若輸入怪異的nickname例如Control_C 則終止連線
      if (stranger(myName)) {
        close();
        return;
      }
      // 廣播給所有聊天室的人
      doBcast("CHAT *** " + myName + " is coming in ***");
      // 並在 console 上顯示 (tty == System.out)
      tty.println(myName + "@" + remoteAddr + " enters the Chat Room " + now.toString());
      // writeLine(msg) 會把 msg 寫到目前連線者終端機
      writeLine("CHAT *** Welcome 歡迎 " + myName + " 進入聊天室 ***");
      writeLine("You can type '/help' for help");

      String cmd, msg;
      int mode;
      FOO:
      while ((cmd = in.readLine()) != null) {
        StringTokenizer stkn = new StringTokenizer(cmd, " \t");
        String command = " ";
        if (stkn.countTokens() >= 1) command = stkn.nextToken();
        msg = " ";
        if (stkn.hasMoreTokens()) msg = stkn.nextToken("\n");
        mode = parseCommand(command.toUpperCase());
        switch (mode) {
          case CMD_MSG:
            doMsg(msg);
            break;
          case CMD_LIST:
            doList();
            break;
          case CMD_QUERY:
            doQuery(cmd.substring(6));
            break;
          case CMD_NICK:
            doNick(msg);
            break;
          case CMD_HELP:
            doHelp();
            break;
          case CMD_QUIT:
            now = new Date();
            tty.println(myName + "  said BYE   at   " + now.toString());
            doBcast("[" + myName + " saied Bye Bye! ]");
            break FOO;
          case CMD_DATA:
            doBcast("[" + myName + "] " + cmd);
            tty.println(myName + ": " + cmd);
            break;
        } // switch
      } // while  FOO:
    } catch (Exception e) {
      tty.println(e.toString());
    }
    now = new Date();
    tty.println(now.toString() + "  one thread stop");
    close();
  }