📄 servergamecontainer.java
字号:
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 + -