/* クライアントの情報を消去するメソッド 『BYE』*/ void removeClient() throws IOException { ChatClientHandler removeHandler = this; ChatClientHandler handler = null; clients.remove(removeHandler); // クライアントをリストから消去 post(removeHandler.getClientName() + " disconnected."); System.out.println(removeHandler.getClientName() + " disconnected."); // サーバ }
/* 接続している全員にmessageを送信するメソッド 『POST』*/ public void post(String message) throws IOException { int flag1 = 1; // フラグ(送信者表示時に利用) System.out.println(message); List names = new ArrayList(); // 送信者リストを作る // チャットに参加しているユーザ全員にメッセージを送信する for (int i = 0; i < clients.size(); i++) { ChatClientHandler handler = (ChatClientHandler) clients.get(i); if (handler != this) { // 自分以外のユーザで names.add(handler.getClientName()); // 送信者リストに名前追加 handler.send("[" + this.getClientName() + "]" + message); // メッセージを送信 } } Collections.sort(names); // 送信者リストをソート String returnMessage = ""; // 初期化 for (int i = 0; i < names.size(); i++) { // if (flag1 == 0) // 2人目以降、前に「,」つける returnMessage = returnMessage + ","; returnMessage = returnMessage + names.get(i); // 送信者リストに名前を追加 flag1 = 0; // 2人目以降フラグをおろす } this.send("<< To. " + returnMessage + ">>"); }
public void setInitialName() { // 名前をつける String name = "undefined"; int num = 1; for (int i = 0; i < clients.size(); i++) { ChatClientHandler handler = (ChatClientHandler) clients.get(i); if (handler.getClientName().equals(name + num)) { // 同じ名前の人がいたら num++; } } this.name = name + num; }
/* 名前を変更するためのメソッド 『NAME』*/ public void name(String name) throws IOException { String preName = this.getClientName(); for (int i = 0; i < clients.size(); i++) { ChatClientHandler handler = (ChatClientHandler) clients.get(i); if (name.equals(handler.getClientName())) { // 他に同じ名前の人がいたら this.send("同じ名前があります。"); // クライアントに送信 return; // メソッドの処理を終了 } } setClientName(name); // 名前を設定する for (int i = 0; i < clients.size(); i++) { ChatClientHandler handler = (ChatClientHandler) clients.get(i); if (handler != this) { // 自分以外のユーザで handler.send("name:" + preName + "->" + name); // 他のユーザにも名前の変更を知らせる } } System.out.println("name:" + name); // サーバに残す }