⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servergamecontainer.java

📁 ErGo是一个很早的Java通用围棋服务器(IGS/NNGS)客户端程序。有全部源码和文档
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    ServerGame sg = byNames(gw.game.whiteName, gw.game.blackName);
    // in this case, there may well be a legitimate reason for the game not
    // exisiting, i.e., it has finished.
    if (sg == null) return;	// fail silently
    sg.gw = null;
    updateGame(sg, false);
  }

  public synchronized ServerGame byNames(String wname, String bname) {
    tsg.imbue(wname, bname);
    return (ServerGame)serverGames.get(tsg);
  }

  public int compare(int method, Object o1, Object o2) {
    ServerGame s1 = (ServerGame) o1;
    ServerGame s2 = (ServerGame) o2;
    switch(method) {
    case SORT_NUM:
      if (s1.num > s2.num) return 1;
      else return -1;
    case SORT_RANK:
      Rank s1r, s2r;
      if (s1.wrank.compareTo(s1.brank) < 0)
        s1r = s1.wrank;
      else
        s1r = s1.brank;
      if (s2.wrank.compareTo(s2.brank) < 0)
        s2r = s2.wrank;
      else
        s2r = s2.brank;
      return s1r.compareTo(s2r);
    case SORT_MOVE:
      if (s1.move > s2.move) return 1;
      return -1;
    }
    return 0;
  }

  private void checkGameWindow (ServerGame sg) {
    sg.gw = client.getGameWindowByNumber(sg.num);
    // if a game has finished, then do not hatch it in the view.
    if (sg.gw != null) {
      if (sg.gw.isOnServer() == false)
	sg.gw = null;
    }
  }

  public void addGame (ServerGame sg, boolean quietness) {
    serverGames.put(sg, sg);
    checkGameWindow(sg);
    mb.insertEntry(sg, sg.render(), quietness);
  }

  public void updateGame (ServerGame sg, boolean quietness) {
    checkGameWindow(sg);
    mb.updateEntry(sg, sg.render());
  }
  public void removeGame(ServerGame sg, boolean quietness) {
    if (sg == null) return;
    serverGames.remove(sg);
    mb.removeEntry(sg, quietness);
    //    System.out.println("Hash now "+serverPlayer.size()+" elements");
  }
  public void clear() {
    for (Enumeration e = Games(); e.hasMoreElements(); ) {
      removeGame(nextGame(e), true);
    }
  }
  public void destroy() {
    clear();
    TerminalWindow.registrar.deregisterWindowsMenuCommand(sgcw);
    sgcw.dispose();
  }
  public void update() {
    mb.refresh();
  }
  public void show() {
    sgcw.show();
  }
  public void setSort(int sortm) {
    opser.updateOption(sgcsortString, new Integer(sortm));
    mb.reSort(sortm);
    mb.refresh();
  }
  public void disapply(int gnum, String white, String black) {
    ServerPlayerContainer spc = control.spc;
    Enumeration e = spc.Players();
    boolean changed = false;
    for (;e.hasMoreElements();) {
      ServerPlayer sp = spc.nextPlayer(e);
      String sgn = Integer.toString(gnum);
      if (sp.observing.equals(sgn)) {
        sp.observing = "--";
        spc.updatePlayer(sp, true);
        changed = true;
      }
      if (sp.playing.equals(sgn)) {
        sp.playing = "--";
        spc.updatePlayer(sp, true);
        changed = true;
      }
    }
    if (changed) spc.update();
    ServerGame sg = byNames(white, black);
    removeGame(sg, false);
  }
  public void applyreflect(ServerGame applied, boolean quietness) {
    ServerPlayerContainer spc = control.spc;
    ServerPlayer spw = spc.byName(applied.wname);
    ServerPlayer spb = spc.byName(applied.bname);
    String sgn = Integer.toString(applied.num);
    if (spw != null) {
      spw.playing = sgn;
      spc.updatePlayer(spw, quietness);
    }
    if (spb != null) {
      spb.playing = sgn;
      spc.updatePlayer(spb, quietness);
    }
  }
     
  public void apply(String num, String wname, String wrank, String bname, String
		    brank, String move, String size, String handi, String komi, String
		    byo, String freeness, String observers, boolean quietness){
    ServerGame corresp;
    try {
      if ((corresp = byNames(wname, bname))==null) {
        corresp = new ServerGame();
        corresp.imbue(num, wname, wrank, bname, brank, move, size, handi, komi,
		      byo, freeness, observers);
        addGame(corresp, quietness);
      }
      else {
        corresp.imbue(num, wname, wrank, bname, brank, move, size, handi, komi,
		      byo, freeness, observers);
        updateGame(corresp, quietness);
      }
      applyreflect(corresp, quietness);
    }
    catch (ParseException e) {
      Debug.backtrace(e);
    }
  }
  public void apply(String num, String wname, String wrank, String bname,
		    String brank, String move) {
    ServerGame corresp;
    try {
      if ((corresp = byNames(wname, bname))==null) {
        corresp = new ServerGame();
        corresp.imbue(num, wname, wrank, bname, brank, move);
        addGame(corresp, false);
	applyreflect(corresp, false);
      }
    }
    catch (ParseException e) {
      Debug.backtrace(e);
    }
  }

  public void apply(String num, String wname, String wrank, String bname, String brank) {
    ServerGame corresp;
    try {
      if ((corresp = byNames(wname, bname))==null) {
        corresp = new ServerGame();
        corresp.imbue(num, wname, wrank, bname, brank);
        addGame(corresp, false);
	applyreflect(corresp, false);
      }
    }
    catch (ParseException e) {
      Debug.backtrace(e);
    }
  }

  class ServerGame {
    int num;
    String wname;
    Rank wrank;
    String bname;
    Rank brank;
    String size = "?";
    String handi = "?";
    String komi = "?";
    String byo = "?";
    int move = 0;
    String freeness   = "?";
    String observers = "0";
    GameWindow gw = null;
    ServerGame() {}

    public void imbue(String num1, String wname1, String wrank1, String bname1, String brank1, String move1, String size1, String handi1, String komi1, String byo1, String freeness1, String observers1) throws ParseException {
      size = size1; handi = handi1; komi = komi1; byo = byo1;
      freeness = freeness1; observers = observers1;
      imbue(num1, wname1, wrank1, bname1, brank1, move1);
    }

    public void imbue(String num1, String wname1, String wrank1, String bname1, String brank1, String move1) throws ParseException {
      move = Integer.parseInt(move1);
      imbue(num1, wname1, wrank1, bname1, brank1);
    }

    public void imbue(String num1, String wname1, String wrank1, String bname1, String brank1) throws ParseException {
      num = Integer.parseInt(num1);
      wrank = new Rank(wrank1);
      brank = new Rank(brank1);
      imbue(wname1, bname1);
    }  

    public void imbue(String wname1, String bname1) { // tiny imbue for serverGames
      wname = wname1; bname = bname1;
    }


    public String[] render() {
      String[] fields = { Integer.toString(num)+".", wname, wrank.render(), bname,
			  brank.render(), Integer.toString(move), size,
			  handi, komi, byo, freeness, observers, gw == null?null:""};
      return fields;
    }

    public boolean equals(Object other) {
      if (! (other instanceof ServerGame)) return false;
      ServerGame othersg = (ServerGame)other;
      return (othersg.wname.equals(wname) && othersg.bname.equals(bname));
    }

    public int hashCode() {
      return wname.hashCode() * bname.hashCode();
    }
  }  // end class ServerGame

}  // end class ServerGameContainer

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -