亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chatapplet.java

?? 使用網路電話雖然方便
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
package at.ac.uni_linz.tk.vchat;

import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.net.*;
import symantec.itools.awt.*;


/**
 * Provides the Chat's main client functionality, it administrates users and takes
 * control over UserEvents. The user interface shown in the applet area is the
 * LoginPanel only, the ChatPanel is part of an own Frame (ChatFrame).
 *
 * @author      Arno Huetter
 * (C)opyright by the Institute for Computer Science, Telecooperation Department, University of Linz
 */

public class ChatApplet extends Applet implements ChatRepository, Runnable {

  private LoginPanel loginPanel;
  private ChatFrame chatFrame;
  private ChatClient chatClient;

  private Image[] moodIcon, defaultAvatar;
  private Image emptyIcon, unknownIcon, defaultBackAvatar, imgSlider;

  private IntegerHashtable userTable, roomTable, userRoomTable;
  private int currentUserId;

  private Date histDate, chatStartDate;
  private boolean historyMode, chatRunning;
  private String status;
  private Simulator simulator;

  private HistoryPanel pnlHistory;
  private Hashtable hashHistory;
  private Thread thrMoodTimeout;

  private ImageCanvas logoCanvas;
  private MediaTracker tracker;

  public static String SERVER_POTRAIT_FILENAME[][] = { { "smiley6.gif", "smiley0.gif", "smiley1.gif", "smiley2.gif", "smiley3.gif", "smiley4.gif", "smiley5.gif" },
                                                             { "man1.gif", "man1.gif", "man1.gif", "man1.gif", "man1.gif", "man1.gif", "man1.gif" },
                                                             { "man2.gif", "man2.gif", "man2.gif", "man2.gif", "man2.gif", "man2.gif", "man2.gif" },
                                                             { "woman1.gif", "woman1.gif", "woman1.gif", "woman1.gif", "woman1.gif", "woman1.gif", "woman1.gif" },
                                                             { "woman2.gif", "woman2.gif", "woman2.gif", "woman2.gif", "woman2.gif", "woman2.gif", "woman2.gif" },
                                                             { "baghead.gif", "baghead.gif", "baghead.gif", "baghead.gif", "baghead.gif", "baghead.gif", "baghead.gif" },
                                                             { "teddy.gif", "teddy.gif", "teddy.gif", "teddy.gif", "teddy.gif", "teddy.gif", "teddy.gif" },
                                                             { "moonmask.gif", "moonmask.gif", "moonmask.gif", "moonmask.gif", "moonmask.gif", "moonmask.gif", "moonmask.gif" },
                                                             { "devilmask.gif", "devilmask.gif", "devilmask.gif", "devilmask.gif", "devilmask.gif", "devilmask.gif", "devilmask.gif" },
                                                             { "darkmask.gif", "darkmask.gif", "darkmask.gif", "darkmask.gif", "darkmask.gif", "darkmask.gif", "darkmask.gif" }
                                                             };
  public static String SERVER_POTRAIT_NAME[] = { "Smiley", "Man 1", "Man 2", "Woman 1", "Woman 2", "Baghead", "Teddy", "Moon Mask", "Devil Mask", "Dark Mask" };


  private class AvatarParam {
    public String name;
    public String[] image = new String[ChatRepository.PREDEFINED_NR_OF_MOODS + 1];
  }


  protected boolean getBooleanParam(String name, boolean defaultVal) {
    return getParameter(name) == null ? defaultVal : new Boolean(getParameter(name)).booleanValue();
  }

/**
 * Initializes the ChatApplet.
 */



  public void init() {
    String param;
    Vector avatars = new Vector();
    for (int i = 0; (param = getParameter("PredefinedAvatar[" + i + "]")) != null; i++) {
        StringTokenizer tok = new StringTokenizer(param, ":");
        if (tok.countTokens() == 2) {
            AvatarParam avatar = new AvatarParam();
            avatar.name = tok.nextToken();
            StringTokenizer tokAv = new StringTokenizer(tok.nextToken(), ",");
            for (int j = 0; j <= ChatRepository.PREDEFINED_NR_OF_MOODS; j++) {
                avatar.image[j] = tokAv.hasMoreTokens() ? tokAv.nextToken() : ( j > 1 ? avatar.image[1] : new String(""));
            }
            avatars.addElement(avatar);
        }
    }

    if (avatars.size() > 0) {
        SERVER_POTRAIT_NAME = new String[avatars.size()];
        SERVER_POTRAIT_FILENAME = new String[avatars.size()][ChatRepository.PREDEFINED_NR_OF_MOODS + 1];
        for (int i = 0; i < avatars.size(); i++) {
            SERVER_POTRAIT_NAME[i] = ((AvatarParam)avatars.elementAt(i)).name;
            for (int j = 0; j <= ChatRepository.PREDEFINED_NR_OF_MOODS; j++) {
                SERVER_POTRAIT_FILENAME[i][j] = ((AvatarParam)avatars.elementAt(i)).image[j];
            }
        }
    }

    logoCanvas = new ImageCanvas(getImage(LOGO_FILENAME, true), LOGO_DIMENSION);
    logoCanvas.showDocumentOnClick(this, LOGO_URL);

    moodIcon = new Image[PREDEFINED_NR_OF_MOODS];
    defaultAvatar = new Image[PREDEFINED_NR_OF_MOODS];

    defaultBackAvatar = getImage(SERVER_POTRAIT_FILENAME[0][0]);

    for (int i = 0; i < PREDEFINED_NR_OF_MOODS; i++) {
      moodIcon[i] = getImage(MOOD_ICON_NAME[i]);
      defaultAvatar[i] = getImage(SERVER_POTRAIT_FILENAME[0][i + 1]);
    }

    emptyIcon = getImage(EMPTY_ICON_NAME);
    unknownIcon = getImage(UNKNOWN_ICON_NAME);
    setBackground(CONTAINER_BACKGROUND);

    imgSlider = getImage(IMAGE_SLIDER, true);

    setLayout(new GridLayout());
    loginPanel = new LoginPanel(this, getParameter("LoginMode") == null ? LoginPanel.MODE_DEFAULT : ChatUtil.getInt(getParameter("LoginMode")));
    add(loginPanel);

    chatClient = new ChatClient(getHost(), this);

    startChat(getBooleanParam("DemoMode", true));

  }


/**
 * Called by the browser or applet viewer to inform this applet that it is
 * being reclaimed.
 */

  public void destroy() {

    /*
     * Stop the chat on Netscape browsers
     */
    if (System.getProperty("java.vendor").indexOf("Netscape") != -1)
      stopChat();
  }


/**
 * Called by the browser or applet viewer to inform this applet that it should
 * stop its execution.
 */

  public void stop() {
    /*
     * Netscape is buggy on the stop-method() - it might also be called when
     * resizing the browser window
     */
    if (System.getProperty("java.vendor").indexOf("Netscape") == -1)
      stopChat();

  }

  public void setFrameVisibility(boolean visible) {
    chatFrame.setVisible(visible);
  }

/**
 * Starts the chat. Initializes variables, opens the ChatFrame and  runs the
 * simulator.
 */

  public void startChat(boolean demoMode) {
    User robot[];
    Random random;
    Room room;

    userTable = new IntegerHashtable();
    roomTable = new IntegerHashtable();
    hashHistory = new Hashtable();
    chatStartDate = new Date();

    for (int i = 0; i < STANDARD_ROOM_NAME.length; i++) {
        room = new Room(i, STANDARD_ROOM_NAME[i], ChatRepository.ROOM_DIMENSION);
        room.setPrivate(STANDARD_ROOM_PRIVATE[i]);
        room.setDemo(i != 0);
        if (STANDARD_ROOM_INVITED[i]) {
            room.inviteUser("Guest");
        }
        addRoom(room);
    }

    /*
    * Init the demo-version's Users
    */
    User user = new User(UNKNOWN_USER_ID, "Guest", "", Color.red, new Point (ROOM_DIMENSION.width / 2, ROOM_DIMENSION.height / 2), 0, 0, User.HUMAN_RACE);

    user.setBackAvatar(defaultBackAvatar);
    for (int i = 0; i < PREDEFINED_NR_OF_MOODS; i++)
        user.setAvatar(i, defaultAvatar[i]);

    setCurrentUser(user);


    if (demoMode) {

        /*
        * Start the simulator and add the Users
        */
        simulator = new Simulator(this);
        simulator.start();

        random = new Random();
        robot = new User[ROBOT_NAME.length];
        for (int i = 0; i < ROBOT_NAME.length; i++) {
        addUser(robot[i] = new User(ROBOT_USER_ID + i, ROBOT_NAME[i], "", new Color((int)(random.nextDouble() * MAX_COLOR_VALUE), (int)(random.nextDouble() * MAX_COLOR_VALUE), (int)(random.nextDouble() * MAX_COLOR_VALUE)), new Point ((int)(random.nextDouble() * 150), (int)(random.nextDouble() * 150)), (int)(random.nextDouble() * 360), 0, User.ROBOT_RACE));
        robot[i].setAvatar(0, getImage(ROBOT_PORTRAIT_FILENAME[i]));
        robot[i].setCommercialBanner(ROBOT_COMMERCIAL_BANNER[i]);
        simulator.addUser(robot[i]);
        }
    }

    chatFrame = new ChatFrame(this);
    chatFrame.setSize(800, 620);
    chatFrame.setVisible(demoMode);

    historyMode = false;
    setStatus("", true);

    chatRunning = true;
  }


/**
 * Closes a possible server-connection, stops the simulator and closes the
 * ChatFrame.
 */

  public void stopChat() {
    chatRunning = false;
    chatClient.disconnect();

    if (simulator != null && simulator.isAlive())
      simulator.stop();

    if (chatFrame != null) {
      chatFrame.setVisible(false);
      // chatFrame = null;
    }
  }


/**
 * Returns true in case the ChatClient is running.
 */

  public boolean chatRunning() {
    return chatRunning;
  }


/**
 * Fills up the RoomListPanel's XList with the Rooms' data.
 */

  public void fillRoomList() {
    if (chatFrame != null)
      chatFrame.fillRoomList();
  }


/**
 * Repaints the whole ChatFrame.
 */

  public void repaintAll() {
    if (chatFrame != null)
      chatFrame.repaintAll();
  }


/**
 * Repaints the ChatFrame's ViewCanvas.
 */

  public void repaintView() {
    if (chatFrame != null)
      chatFrame.repaintView();
  }


/**
 * Updates RoomListPanel's XList with the Rooms' data.
 */

  public void updateRoomList() {
    if (chatFrame != null)
      chatFrame.updateRoomList();
  }


/**
 * Repaints the ChatFrame's RoomPanel.
 */

  public void repaintRoom() {
    if (chatFrame != null)
      chatFrame.repaintRoom();
  }


/**
 * Repaints the ChatFrame's MoodCanvas.
 */

  public void repaintMood() {
    if (chatFrame != null)
      chatFrame.repaintMood();
  }


/**
 * Repaints the current User.
 */

  public void repaintUser() {
  }


/**
 * Adds a new User.
 *
 * @param userParam      the User to be added
 */

  public synchronized void addUser(User userParam) {
    userTable.put(userParam.getId(), userParam);
    moveUserToRoom(userParam.getId(), userParam.getRoom(), false);
    if (userParam.getRoom() == getCurrentRoomId()) {
      repaintRoom();
      if (userParam.getId() == getCurrentUserId() || inVisualRange(getCurrentUserId(), userParam.getId()))
        repaintView();
    }
  }


/**
 * Adds a new Room.
 *
 * @param roomParam      the Room to be added
 */

  public synchronized void addRoom(Room roomParam) {
    roomTable.put(roomParam.getId(), roomParam);
    repaintAll();
    fillRoomList();
  }


/**
 * Removes a User.
 *
 * @param idParam      the id of the User to be removed
 */

  public synchronized void removeUser(int idParam) {
    int roomId;

    if (idParam != getCurrentUserId() && userTable.containsKey(idParam)) {
      roomId = getUser(idParam).getRoom();
      getRoom(roomId).removeUser(getUser(idParam).getName());
      userTable.remove(idParam);
      updateRoomList();
      if (roomId == getCurrentRoomId()) {
        repaintRoom();
        repaintView();
      }
    }
  }


/**
 * Removes a Room.
 *
 * @param idParam      the Id of the Room to be removed
 */

  public synchronized void removeRoom(int roomIdParam) {
    if (getRoom(roomIdParam) != null && getRoom(roomIdParam).getNrOfUsers() == 0) {
      roomTable.remove(roomIdParam);
      repaintAll();
      fillRoomList();
    }
  }


/**
 * Removes all but the current User from the chat system. Needed when connecting/
 * disconnecting to/from the chat server.
 */

  public synchronized void removeAllExceptCurrentUser() {
    User user;
    Enumeration roomIds;

    user = getCurrentUser();

    userTable = new IntegerHashtable();
    roomIds = getRoomIds();
    while (roomIds.hasMoreElements())
      getRoom(((Integer)roomIds.nextElement()).intValue()).removeAllUsers();

    addUser(user);
    repaintRoom();
    repaintView();
  }


/**
 * Removes User with "unknown" id (demo User).
 */

  public synchronized void removeUnknownUser() {
    if (getCurrentUserId() != UNKNOWN_USER_ID)
      removeUser(UNKNOWN_USER_ID);
  }


/**
 * Stops the simulator. Called when connecting to the chat server.
 */

  public void stopSimulator() {
    for (int i = 0; i < ROBOT_NAME.length; i++) {
      if (getUser(ROBOT_USER_ID + i) != null)
        removeUser(ROBOT_USER_ID + i);
    }
  }


/**
 * Removes all ROoms except the default Room.
 */

  public synchronized void removeAllExceptDefaultRoom() {
    Enumeration roomEnum;
    Room room;
    roomEnum = roomTable.elements();
    while (roomEnum.hasMoreElements()) {
      room = (Room)roomEnum.nextElement();
      if (room.getId() != 0)
        forceRoomRemoval(room.getId(), false);
    }
  }


/**
 * Returns the User with a certain id.
 *
 * @param idParam      the User's id
 */

  public synchronized User getUser(int idParam) {
    Object object;
    object = userTable.get(idParam);
    if (object != null)
      return (User)object;
    else
      return null;
  }


/**
 * Sets the current User by his id. This User has to exist already.
 *
 * @param idParam      the User's id
 */

  public synchronized void setCurrentUserId(int idParam) {
    if (userTable.containsKey(idParam)) {
      currentUserId = idParam;
      moveUserToRoom(idParam, getUser(idParam).getRoom(), false);
      repaintView();
      repaintRoom();
      repaintMood();
      repaintCurrentUser();
    }
  }


/**
 * Returns the current User's id.
 */

  public synchronized int getCurrentUserId() {
    return currentUserId;
  }


/**
 * Returns the current User.
 */

  public synchronized User getCurrentUser() {
    return getUser(currentUserId);
  }


/**
 * Sets the current User.
 *
 * @param userParam      the User to be the new current User.
 */

  public synchronized void setCurrentUser(User userParam) {
    addUser(userParam);
    setCurrentUserId(userParam.getId());
  }


/**
 * Returns all Users as an IntegerHashtable.
 */

  public synchronized IntegerHashtable getAllUsers() {
    return userTable;
  }


/**
 * Sets the position of a certain User.
 *
 * @param idParam       the User's id
 * @param position      the new position (refer's to the room's dimension)
 * @param send          determines wheter the new position should be broadcasted
 */

  public synchronized void setUserPosition(int idParam, Point positionParam, boolean send) {
    Enumeration userIdEnum;
    User userParam, user;
    Room currentRoom;
    boolean collides, wasInSight;

    if ((currentRoom = getCurrentRoom()) != null) {
      positionParam = new Point(Math.max(Math.min(positionParam.x, currentRoom.getSize().width - 2), 1), Math.max(Math.min(positionParam.y, currentRoom.getSize().height - 2), 1));
      userParam = getUser(idParam);
      collides = false;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合在线视频| 一区视频在线播放| 91精品国产全国免费观看 | 精品久久久久久综合日本欧美 | 男人的天堂久久精品| 亚洲综合av网| 亚洲成人免费影院| 日本午夜一区二区| 精彩视频一区二区| 国产精品69毛片高清亚洲| 丁香激情综合国产| av电影天堂一区二区在线观看| caoporm超碰国产精品| 色中色一区二区| 欧美人妖巨大在线| 精品国产一区二区三区不卡| 久久精品夜夜夜夜久久| 中文字幕av一区二区三区高| 一区二区三区在线高清| 日韩激情在线观看| 国产suv一区二区三区88区| 成人18视频日本| 欧美久久久久久久久久| 精品久久久久久久久久久院品网| 欧美国产综合一区二区| 亚洲午夜日本在线观看| 久草精品在线观看| 97精品视频在线观看自产线路二| 在线一区二区三区四区五区 | 国产欧美日韩激情| 亚洲综合色自拍一区| 国产一区二区三区视频在线播放| 不卡一区二区中文字幕| 欧美一级二级三级蜜桃| 亚洲欧洲制服丝袜| 精品一区二区三区免费观看| 北岛玲一区二区三区四区 | 精品一区二区三区在线播放视频| 丁香天五香天堂综合| 777午夜精品免费视频| 中文字幕中文字幕在线一区 | 国产三级精品视频| 日韩激情视频在线观看| 色呦呦国产精品| 久久亚洲影视婷婷| 免费在线观看精品| 色婷婷一区二区三区四区| 久久综合中文字幕| 日本系列欧美系列| 欧美日韩一区在线观看| 亚洲天堂免费看| 国产成人精品免费| 日韩欧美一区二区在线视频| 亚洲欧美电影一区二区| 丁香桃色午夜亚洲一区二区三区| 日韩欧美国产一区二区三区 | 欧美一区二区视频网站| 一区二区三区四区高清精品免费观看 | 亚洲人xxxx| 成人动漫在线一区| 久久久99精品免费观看| 久久精品国产99久久6| 91精品国产丝袜白色高跟鞋| 亚洲午夜久久久| 在线看不卡av| 亚洲另类中文字| 色婷婷综合在线| 日韩久久一区二区| 99r国产精品| 亚洲视频香蕉人妖| 日本韩国精品在线| 一区二区三区欧美| 欧美日韩精品福利| 日韩高清中文字幕一区| 欧美一区二区视频网站| 麻豆精品久久久| 日韩视频一区二区在线观看| 欧美aⅴ一区二区三区视频| 欧美久久久久免费| 久久99精品国产麻豆婷婷洗澡| 日韩免费看的电影| 国产一区二区三区在线观看免费视频 | 国产91色综合久久免费分享| 国产欧美日韩不卡免费| 91丨九色丨黑人外教| 亚洲宅男天堂在线观看无病毒| 91官网在线免费观看| 日本中文一区二区三区| 久久久国产午夜精品| 99久久亚洲一区二区三区青草 | 看电视剧不卡顿的网站| 国产毛片精品视频| 麻豆国产精品官网| 天天综合色天天综合色h| 亚洲精品欧美激情| 亚洲视频一区二区在线| 日本一区二区电影| 久久久久久久av麻豆果冻| 日韩欧美www| 337p亚洲精品色噜噜狠狠| 欧美综合色免费| 色综合久久88色综合天天 | 欧美zozo另类异族| 日韩欧美综合在线| 555www色欧美视频| 亚洲综合网站在线观看| 91精品久久久久久久99蜜桃| 国产91精品露脸国语对白| 午夜精品久久久久久久蜜桃app | 综合分类小说区另类春色亚洲小说欧美| 久久国产精品露脸对白| 亚洲欧美日韩精品久久久久| 亚洲欧美福利一区二区| 一个色妞综合视频在线观看| 久久综合五月天婷婷伊人| 韩日精品视频一区| 亚洲成人av资源| 亚洲欧美在线视频观看| 久久午夜色播影院免费高清| 欧美影院一区二区三区| 国产精品一区二区三区99| 亚洲国产va精品久久久不卡综合| 欧美激情一区二区三区在线| 日韩一级成人av| 欧美影视一区在线| 97精品久久久久中文字幕| 激情文学综合网| 亚洲成人一区在线| 国产精品国产自产拍高清av王其| 欧美一区在线视频| 在线免费不卡视频| 91麻豆精品在线观看| 成人在线综合网站| 国产永久精品大片wwwapp| 蜜桃视频在线观看一区| 亚洲成a天堂v人片| 亚洲成a人在线观看| 亚洲午夜一区二区| 亚洲观看高清完整版在线观看| 亚洲男人天堂av网| 国产精品国产三级国产aⅴ入口 | 日本韩国欧美一区二区三区| av一本久道久久综合久久鬼色| 精品一区二区三区免费| 免费观看一级欧美片| 日韩影视精彩在线| 天天av天天翘天天综合网 | 欧美久久久久久久久| 欧美日韩一区在线| 欧美性大战久久久久久久| 欧美亚洲高清一区| 欧美色窝79yyyycom| 欧美日韩一区二区三区在线看 | av在线不卡电影| 成人激情小说网站| 91在线视频网址| 99精品国产99久久久久久白柏| 91影院在线观看| 欧美日韩一级视频| 日韩视频免费观看高清完整版 | 亚洲一级不卡视频| 亚洲成a人v欧美综合天堂| 日韩电影在线免费看| 久久69国产一区二区蜜臀| 国产综合色产在线精品| 成人激情免费视频| 在线亚洲人成电影网站色www| 精品视频免费看| 亚洲精品一线二线三线| 国产精品欧美久久久久一区二区| 国产精品久久久久久福利一牛影视| 亚洲欧美日韩精品久久久久| 亚洲国产精品精华液网站| 蜜桃久久精品一区二区| 国产**成人网毛片九色| 欧美色倩网站大全免费| 精品国产乱码久久久久久闺蜜| 欧美国产一区视频在线观看| 一区二区三区四区精品在线视频| 男人操女人的视频在线观看欧美| 国产精品99精品久久免费| 在线影视一区二区三区| 精品国产乱码久久久久久久久 | 香蕉乱码成人久久天堂爱免费| 麻豆一区二区三| 不卡一二三区首页| 69久久99精品久久久久婷婷| 久久久久久久久一| 一区二区高清视频在线观看| 韩国av一区二区三区四区| 色噜噜狠狠成人网p站| 日韩欧美激情一区| 亚洲尤物视频在线| 成人综合婷婷国产精品久久蜜臀| 6080亚洲精品一区二区| 国产精品久久午夜夜伦鲁鲁| 捆绑调教一区二区三区| 欧美视频精品在线观看| 中文字幕亚洲区| 国产精品原创巨作av|