Thread: [Jcrossclient-cvs] jcrossclient CFclient.java,1.33,1.34 Changelog,1.39,1.40 Metaserver.java,1.1,1.2
Status: Alpha
Brought to you by:
cavesomething
From: <jcr...@li...> - 2006-03-24 16:30:04
|
Update of /cvsroot/jcrossclient/jcrossclient In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8945 Modified Files: CFclient.java Changelog Metaserver.java StatWin.java Log Message: implement metaserver interface Index: Metaserver.java =================================================================== RCS file: /cvsroot/jcrossclient/jcrossclient/Metaserver.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Metaserver.java 22 Mar 2006 23:55:30 -0000 1.1 --- Metaserver.java 24 Mar 2006 16:29:55 -0000 1.2 *************** *** 25,28 **** --- 25,40 ---- import java.util.*; + /* small class to allow servers to be sorted by version */ + class ServerCompare implements java.util.Comparator { + public int compare(Object o1, Object o2) { + int version; + ServerData s1 = (ServerData)o1; + ServerData s2 = (ServerData)o2; + version = s2.version.compareTo(s1.version); + if (version !=0) return version; + else return s2.uptime-s1.uptime; + } + } + class ServerData { String ip_address; *************** *** 83,87 **** ! class Metaserver extends Canvas implements MouseListener, ActionListener { int objpixheight=MapWin.pixheight+8; CFclient toplevel; --- 95,99 ---- ! class Metaserver extends Canvas implements MouseListener { int objpixheight=MapWin.pixheight+8; CFclient toplevel; *************** *** 91,96 **** Vector Servers; int serversize=0; - int winwidth=80; // recalc'd every time contents changed - // but lets have a reasonable start! public Metaserver(CFclient tl) { --- 103,106 ---- *************** *** 98,106 **** addMouseListener(this); Servers = new Vector(); - sync_to_metaserver(); } /* open a socket to the metaserver, parse the data recieved, and update the server list */ ! void sync_to_metaserver() { try { metaserver = new Socket("crossfire.real-time.com", 13326); --- 108,116 ---- addMouseListener(this); Servers = new Vector(); } /* open a socket to the metaserver, parse the data recieved, and update the server list */ ! public void sync_to_metaserver() { ! Servers = new Vector(); /* we need to dump the old data */ try { metaserver = new Socket("crossfire.real-time.com", 13326); *************** *** 135,152 **** new_server.setBytesIn(parser.nextToken()); new_server.setBytesOut(parser.nextToken()); Servers.add(new_server); ! System.out.println("new server " + new_server.hostname + " with " + new_server.player_count + " players"); } catch (NoSuchElementException e) { /* try and add the server anyway, we might have enough data to be useful */ Servers.add(new_server); ! System.out.println("broken server " + new_server.hostname + " with " + new_server.player_count + " players"); } } } ! public void actionPerformed(ActionEvent evt) { ! } --- 145,181 ---- new_server.setBytesIn(parser.nextToken()); new_server.setBytesOut(parser.nextToken()); + new_server.setUptime(parser.nextToken()); Servers.add(new_server); ! System.out.println("new server " + new_server.hostname + " with " ! + new_server.player_count + " players"); } catch (NoSuchElementException e) { /* try and add the server anyway, we might have enough data to be useful */ Servers.add(new_server); ! System.out.println("broken server " + new_server.hostname + " with " ! + new_server.player_count + " players"); } } + Collections.sort(Servers, new ServerCompare()); + toplevel.showmap("metaserver"); } + /* Takes a time in seconds, and turns it into the string representation of that time */ + String convert_uptime(int time) { + StringBuffer returntime; + int days, hours, minutes; ! days = time/(60*60*24); ! hours = time/(60*60)%24; ! minutes = time/(60)%60; ! if (days+hours+minutes <=1) return "unknown"; ! returntime= new StringBuffer(); ! if (days >1) returntime.append(days + " days "); ! else if (days == 1) returntime.append(days + " day "); ! if (hours > 1) returntime.append(hours + " hours "); ! else if (hours == 1) returntime.append(hours + " hour "); ! if (minutes > 1) returntime.append(minutes + " minutes"); ! else if (minutes == 0) returntime.append(minutes + "minute"); ! return returntime.toString(); } *************** *** 163,167 **** public void mouseClicked(MouseEvent evt) { ! } --- 192,211 ---- public void mouseClicked(MouseEvent evt) { ! ServerData clicked_server; ! int buttonmask=evt.getModifiers(); ! int serverpos=(evt.getY()) / 30; ! if (serverpos > Servers.size() || serverpos <= 0) { ! toplevel.metadesc.setText( ! "Right Click to join server, Left Click to view Comment"); ! return; ! } ! clicked_server = (ServerData)Servers.elementAt(serverpos-1); ! if ((buttonmask&InputEvent.BUTTON1_MASK)>0) { ! toplevel.metadesc.setText(clicked_server.comment); ! } ! else if ((buttonmask&InputEvent.BUTTON3_MASK)>0) { ! toplevel.showmap(); ! toplevel.initConnection(clicked_server.ip_address, clicked_server.hostname); ! } } *************** *** 175,183 **** } ! public void paint(Graphics gc) { ! gc.drawString("(Metaserver window)", 10,10); ! return; } ! } --- 219,264 ---- } ! /* We draw each line of metaserver data 30 pixels apart, ! * using the same spacing convention as the inventory windows ! */ public void paint(Graphics gc) { ! ServerData server; ! FontMetrics fm = gc.getFontMetrics(); ! int hostnamex=fm.stringWidth("Server"); ! int versionx=fm.stringWidth("Version"); ! int playersx=fm.stringWidth("Players"); ! int y_height; ! if (Servers == null) { ! gc.drawString("(Metaserver window)", 10,10); ! return; ! } ! else { ! for (int i=0; i < Servers.size(); i++) { ! server = (ServerData)Servers.elementAt(i); ! if (hostnamex < fm.stringWidth(server.hostname)) ! hostnamex = fm.stringWidth(server.hostname); ! if (versionx < fm.stringWidth(server.version)) ! versionx = fm.stringWidth(server.version); ! if (playersx < fm.stringWidth(""+server.player_count)) ! playersx = fm.stringWidth(""+server.player_count); ! } ! gc.drawString("Server", 0, 10); ! gc.drawString("Version", hostnamex +6, 10); ! gc.drawString("Players", hostnamex +versionx +12, 10); ! gc.drawString("Uptime", hostnamex +playersx +versionx +18, 10); ! gc.drawLine(0, 30,1000, 30); ! for (int i=0; i < Servers.size(); i++) { ! y_height = 30*(i+1) + 18; ! server = (ServerData)Servers.elementAt(i); ! gc.drawString(server.hostname, 3, y_height); ! gc.drawString(server.version, hostnamex +9, y_height); ! gc.drawString("" + server.player_count, ! hostnamex +versionx +15, y_height); ! gc.drawString(convert_uptime(server.uptime), ! hostnamex +versionx +playersx+21, y_height); ! gc.drawLine(0, 30*(i+2)-1,1000, 30*(i+2)-1); ! } ! } } ! } Index: CFclient.java =================================================================== RCS file: /cvsroot/jcrossclient/jcrossclient/CFclient.java,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** CFclient.java 22 Mar 2006 23:55:30 -0000 1.33 --- CFclient.java 24 Mar 2006 16:29:50 -0000 1.34 *************** *** 66,119 **** } - // popup to ask user what server he'd like to connect to. - // usually only called if we have a problem connecting to default - class ServerDialog extends Dialog implements ActionListener { - TextField servername; - CFclient Parent; - - public void actionPerformed(ActionEvent evt) { - String cmd = evt.getActionCommand(); - if(cmd.equals("Connect to server") ||evt.getSource().equals(servername)) { - setVisible(false); - Parent.initConnection(getServerName()); - return; - } - } - - public String getServerName() { - // perhaps might filter out carriage-returns? - return servername.getText(); - } - - public ServerDialog(CFclient parent) { - super(parent); // Dialog(Frame) call. - - Parent = parent; - - // I dont believe in model dialogs - setModal(false); - setTitle(new String("Server Connect")); - - add(new Label("What server should we connect to?"), "North"); - servername=new TextField(40); - servername.addActionListener(this); - add(servername); - Button connect, quit; - - connect=new Button("Connect to server"); - quit=new Button("Quit"); - Panel buttonholder=new Panel(); - buttonholder.setLayout(new FlowLayout()); - connect.addActionListener(this); - quit.addActionListener(Parent); - buttonholder.add(connect); - buttonholder.add(quit); - - add(buttonholder, "South"); - - // have parent call pack(); - } - } - class CFclient extends Frame implements KeyListener, ActionListener, ComponentListener, FocusListener { --- 66,69 ---- *************** *** 150,157 **** MagicMap magicmap; Metaserver metaserver; ! public ScrollPane iscrollp, escrollp, sscrollp, spscrollp; ! Panel viewpane; - ServerDialog chooseserver; ServerCon mConnection; --- 100,107 ---- MagicMap magicmap; Metaserver metaserver; ! public ScrollPane iscrollp, escrollp, sscrollp, spscrollp, mscrollp; ! Panel viewpane, metapanel; ! TextArea metadesc; ServerCon mConnection; *************** *** 520,525 **** /*When the server read thread detects * connection no longer valid, it should ! * automatically put up a new ServerDialog, ! * and stop itself */ } --- 470,474 ---- /*When the server read thread detects * connection no longer valid, it should ! * automatically display the metaserver data. */ } *************** *** 1034,1038 **** err.getMessage()+"\n"); err.printStackTrace(); ! askForServername(); Thread.currentThread().stop(); } --- 983,987 ---- err.getMessage()+"\n"); err.printStackTrace(); ! metaserver.sync_to_metaserver(); Thread.currentThread().stop(); } *************** *** 1259,1263 **** magicmap = new MagicMap(this); metaserver = new Metaserver(this); ! TabPanel leftside = new TabPanel(); Panel topside = new VertPanel(); --- 1208,1218 ---- magicmap = new MagicMap(this); metaserver = new Metaserver(this); ! ! metapanel = new Panel(new BorderLayout()); ! metadesc = new TextArea( ! "Right Click to join server, Left Click to view Comment", ! 4, 60, TextArea.SCROLLBARS_VERTICAL_ONLY); ! metadesc.setEditable(false); ! TabPanel leftside = new TabPanel(); Panel topside = new VertPanel(); *************** *** 1271,1274 **** --- 1226,1230 ---- escrollp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); sscrollp = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED); + mscrollp = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED); iscrollp.setSize(290,210); *************** *** 1286,1289 **** --- 1242,1256 ---- spscrollp.add(spellwin); (spscrollp.getVAdjustable()).setUnitIncrement(10); + + /* make the server list occupy ~80% of the map pane, + * the remaining 20% should then go to the description box + */ + mscrollp.setSize(MapWin.pixwidth*MapWin.XMAX, (int)(0.8*MapWin.pixheight*MapWin.YMAX)); + mscrollp.add(metaserver); + (mscrollp.getVAdjustable()).setUnitIncrement(10); + + /* having defined the metaserver widgets, let's set them up now */ + metapanel.add(mscrollp); + metapanel.add(metadesc, BorderLayout.SOUTH); sscrollp.add(skillwin); *************** *** 1297,1301 **** viewpane.add("map", mapwin); viewpane.add("magicmap", magicmap); ! viewpane.add("metaserver", metaserver); topside.add(viewpane); topside.add(miscwin); --- 1264,1268 ---- viewpane.add("map", mapwin); viewpane.add("magicmap", magicmap); ! viewpane.add("metaserver", metapanel); topside.add(viewpane); topside.add(miscwin); *************** *** 1553,1566 **** } - // This will be called EITHer if we cannot make initial connection, - // OR, if current connection breaks. - public void askForServername() { - if(chooseserver==null) { - chooseserver=new ServerDialog(this); - chooseserver.pack(); - } - chooseserver.setVisible(true); - } - // Random stuff that needs to be set up at end of things. // like Thread timings --- 1520,1523 ---- *************** *** 1593,1610 **** // To avoid nasty thread loops, This should be called ONLY FROM ! // either CFclient.CFclient(), or ! // CFclient.actionPerformed(). [aka ServerDialog callback] ! void initConnection(String serv) { if(loopcheck != null) { loopcheck.stop(); } ! debug("Connecting to "+serv+"..."); ! setTitle("Crossfire@"+serv); mConnection = new ServerCon(this, serv); if(mConnection.isBroke()) { ! debug("Sigh... cannot make connection to "+serv); ! talkwin.addDisplayLine("ERROR: cannot connect to server "+serv+"\n"); ! askForServername(); return; } --- 1550,1567 ---- // To avoid nasty thread loops, This should be called ONLY FROM ! // either CFclient.CFclient(), or the metaserver panel. ! void initConnection(String serv, String name) { if(loopcheck != null) { loopcheck.stop(); } ! debug("Connecting to "+name+"..."); ! setTitle("Crossfire - "+name); mConnection = new ServerCon(this, serv); if(mConnection.isBroke()) { ! debug("Sigh... cannot make connection to "+name); ! talkwin.addDisplayLine("ERROR: cannot connect to server "+name+"\n"); ! /* contact the metaserver, to get a new list of servers to choose from */ ! metaserver.sync_to_metaserver(); return; } *************** *** 1618,1621 **** --- 1575,1583 ---- loopcheck.start(); } + + /* if we aren't connecting via the metaserver, we'll use the ip_address as the name instead */ + void initConnection(String serv) { + initConnection(serv, serv); + } boolean doneBlank=false; Index: StatWin.java =================================================================== RCS file: /cvsroot/jcrossclient/jcrossclient/StatWin.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** StatWin.java 26 Jan 2006 14:53:48 -0000 1.5 --- StatWin.java 24 Mar 2006 16:29:55 -0000 1.6 *************** *** 67,71 **** public StatWin(PlayerStats pl) { // evil, evil! But no other way. sigh. ! super("", 0, 0, SCROLLBARS_NONE); playerstats = pl; --- 67,71 ---- public StatWin(PlayerStats pl) { // evil, evil! But no other way. sigh. ! super("", 0, 0, SCROLLBARS_VERTICAL_ONLY); playerstats = pl; Index: Changelog =================================================================== RCS file: /cvsroot/jcrossclient/jcrossclient/Changelog,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** Changelog 22 Mar 2006 23:55:30 -0000 1.39 --- Changelog 24 Mar 2006 16:29:54 -0000 1.40 *************** *** 286,287 **** --- 286,299 ---- CFclient - Add a metaserver pane to the main window. + + 24/02/2006 - StatWin - Use Scrollbars where appropriate for the stat window + + CFClient - Remove server dialog + - Add metaserver panel to the layout + - remove askForServername() replace with metaserver.sync_to_metaserver + + Metaserver - Sort servers by version and uptime + - parse uptime and convert into a readable string + - monitor mouse click events to show comment or connect to server + - paint the server list + |