Source code: org/incenter/ngbclient/frmClient.java
1
2 package org.incenter.ngbclient;
3 import org.incenter.ngbclient.*;
4 import org.incenter.gb.*;
5 import org.incenter.tools.*;
6 import java.awt.*;
7 import java.awt.event.*;
8 import java.net.*;
9 import java.io.*;
10 import java.lang.*;
11 import java.util.*;
12
13 /**
14 *
15 * @author
16 * @version
17 */
18 public class frmClient extends java.awt.Frame
19 implements ActionListener, ItemListener, MouseListener, Observer,
20 macroProvider, ComponentListener, busyObject, sectorUser
21 {
22
23 ResourceFile res;
24 GameData currentGame;
25 String builtship;
26 Vector sessionList;
27
28 /** Initializes the Form */
29 public frmClient() {
30 initComponents ();
31 myInit();
32 setTitle("Galactic Overlords Client");
33 }
34
35 /** This method is called from within the constructor to
36 * initialize the form.
37 * WARNING: Do NOT modify this code. The content of this method is
38 * always regenerated by the FormEditor.
39 */
40 private void initComponents () {//GEN-BEGIN:initComponents
41 setForeground (java.awt.Color.white);
42 setBackground (java.awt.Color.black);
43 addWindowListener (new java.awt.event.WindowAdapter () {
44 public void windowClosing (java.awt.event.WindowEvent evt) {
45 exitForm (evt);
46 }
47 }
48 );
49 setLayout (new java.awt.BorderLayout ());
50
51 menuBar1 = new java.awt.MenuBar ();
52 mnuFile = new java.awt.Menu ();
53 mnuFile.setLabel ("File");
54 menuBar1.add(mnuFile);
55
56
57 setMenuBar(menuBar1);
58 panel2 = new java.awt.Panel ();
59 panel2.setLayout (new java.awt.BorderLayout ());
60
61 label1 = new java.awt.Label ();
62 label1.setText ("Galactic Overlords");
63 label1.setAlignment (java.awt.Label.CENTER);
64 panel2.add (label1, "North");
65
66 lblFlash = new java.awt.Label ();
67 lblFlash.setText ("Flash Messages");
68 panel2.add (lblFlash, "South");
69
70 add (panel2, "North");
71
72 pnlCenter = new java.awt.Panel ();
73 pnlCenter.setLayout (new java.awt.FlowLayout ());
74
75 add (pnlCenter, "Center");
76
77 panel4 = new java.awt.Panel ();
78 panel4.setLayout (new java.awt.BorderLayout ());
79
80 panel5 = new java.awt.Panel ();
81 panel5.setLayout (new java.awt.BorderLayout ());
82
83 lstMsg = new java.awt.List ();
84 panel5.add (lstMsg, "Center");
85
86 panel4.add (panel5, "Center");
87
88 lblStatus = new java.awt.Label ();
89 lblStatus.setText ("Status");
90 panel4.add (lblStatus, "South");
91
92 panel3 = new java.awt.Panel ();
93 panel3.setLayout (new java.awt.GridLayout (4, 1));
94
95 lblServer = new java.awt.Label ();
96 lblServer.setText ("Server");
97 panel3.add (lblServer);
98
99 label3 = new java.awt.Label ();
100 label3.setText ("Messages");
101 panel3.add (label3);
102
103 pnlNetBug = new java.awt.Panel ();
104 pnlNetBug.setLayout (new java.awt.FlowLayout ());
105
106 panel3.add (pnlNetBug);
107
108 panel4.add (panel3, "West");
109
110 panel6 = new java.awt.Panel ();
111 panel6.setLayout (new java.awt.GridLayout (4, 1));
112
113 cmboGame = new java.awt.Choice ();
114 panel6.add (cmboGame);
115
116 btnConnect = new java.awt.Button ();
117 btnConnect.setLabel ("Connect");
118 panel6.add (btnConnect);
119
120 btnDisconnect = new java.awt.Button ();
121 btnDisconnect.setLabel ("Disconnect");
122 panel6.add (btnDisconnect);
123
124 btnQuit = new java.awt.Button ();
125 btnQuit.setLabel ("Quit");
126 panel6.add (btnQuit);
127
128 panel4.add (panel6, "East");
129
130 pnlCenterLow = new java.awt.Panel ();
131 pnlCenterLow.setLayout (new java.awt.BorderLayout ());
132
133 lblTip = new java.awt.Label ();
134 lblTip.setText ("Tooltip");
135 pnlCenterLow.add (lblTip, "North");
136
137 pnlTemp = new java.awt.Panel ();
138 pnlTemp.setLayout (new java.awt.FlowLayout ());
139
140 label2 = new java.awt.Label ();
141 label2.setText ("label2");
142 pnlTemp.add (label2);
143
144 label4 = new java.awt.Label ();
145 label4.setText ("label4");
146 pnlTemp.add (label4);
147
148 button1 = new java.awt.Button ();
149 button1.setLabel ("button1");
150 pnlTemp.add (button1);
151
152 pnlCenterLow.add (pnlTemp, "Center");
153
154 panel4.add (pnlCenterLow, "North");
155
156 add (panel4, "South");
157
158 pnlLeft = new java.awt.Panel ();
159 pnlLeft.setLayout (new java.awt.FlowLayout ());
160
161 add (pnlLeft, "West");
162
163 pnlRight = new java.awt.Panel ();
164 pnlRight.setLayout (new java.awt.FlowLayout ());
165
166 panel1 = new java.awt.Panel ();
167 panel1.setLayout (new java.awt.FlowLayout ());
168
169 pnlRight.add (panel1);
170
171 add (pnlRight, "East");
172
173 }//GEN-END:initComponents
174
175 /** Exit the Application */
176 private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
177 System.exit (0);
178 }//GEN-LAST:event_exitForm
179
180
181 // Variables declaration - do not modify//GEN-BEGIN:variables
182 private java.awt.Panel panel2;
183 private java.awt.Panel pnlCenter;
184 private java.awt.Panel panel4;
185 private java.awt.Panel pnlLeft;
186 private java.awt.Panel pnlRight;
187 private java.awt.Label label1;
188 private java.awt.Label lblFlash;
189 private java.awt.Panel panel5;
190 private java.awt.Label lblStatus;
191 private java.awt.Panel panel3;
192 private java.awt.Panel panel6;
193 private java.awt.Panel pnlCenterLow;
194 private java.awt.List lstMsg;
195 private java.awt.Label lblServer;
196 private java.awt.Label label3;
197 private java.awt.Choice cmboGame;
198 private java.awt.Button btnConnect;
199 private java.awt.Button btnDisconnect;
200 private java.awt.Button btnQuit;
201 private java.awt.Label lblTip;
202 private java.awt.Panel pnlTemp;
203 private java.awt.Label label2;
204 private java.awt.Label label4;
205 private java.awt.Button button1;
206 private java.awt.Panel panel1;
207 private java.awt.MenuBar menuBar1;
208 private java.awt.Menu mnuFile;
209 private java.awt.Panel pnlNetBug;
210 // End of variables declaration//GEN-END:variables
211 // client variables
212 objSocket socket;
213 String hostname, racepass, govpass;
214 int port = 2031;
215 PopupMenu popup;
216 Canvas centerPanel;
217 Component center;
218 ScrollPane leftScroll, rightScroll, centerScroll;
219 Dimension currentSize = new Dimension(1024,768);
220 Dimension centerSize = new Dimension((int)(.6 * currentSize.width),
221 (int)(.6 * currentSize.height));
222 Dimension leftSize = new Dimension((int)(.2 * currentSize.width),
223 (int)(.2 * currentSize.height));
224 Dimension rightSize = new Dimension((int)(.2 * currentSize.width),
225 (int)(.2 * currentSize.height));
226 pnlNav pnlNav;
227 String whoami;
228 boolean busy = false;
229 netBug netBug;
230 String version = "1.91 built April 28, 2000";
231 status status;
232 TextField txtBCast;
233
234 /**
235 * static ints for sector selecting
236 */
237 public static final int SECTOR_BUILD_FACTORY = 0;
238 int sectorSelectedFor;
239
240 public void setSector(location loc) {
241 switch(sectorSelectedFor) {
242 case SECTOR_BUILD_FACTORY:
243 buildFactory(loc);
244 }
245 }
246
247 public Dimension getCenterSize() { return centerSize; }
248
249 // busyObject method
250 public void setBusy(boolean t) { busy = t; }
251 public boolean isBusy() { return busy; }
252
253 // mouse listener
254 public void mouseClicked(MouseEvent evt) {
255 ;
256 }
257
258 public void mouseEntered(MouseEvent evt) {
259 ;
260 }
261
262 public void mouseExited(MouseEvent evt) {
263 ;
264 }
265
266 public void mousePressed(MouseEvent evt) {
267 try {
268 if((evt.getModifiers() & InputEvent.BUTTON2_MASK) != 0 ||
269 (evt.getModifiers() & InputEvent.BUTTON3_MASK) != 0) {
270 int x, y;
271 Component c = evt.getComponent();
272 Point p = c.getLocation();
273 x = evt.getX();
274 y = evt.getY();
275 c.add(popup);
276 popup.show(c, x, y);
277 }
278 //if((evt.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
279 //if(evt.getSource().equals(dollPanel)) {
280 //}
281 //}
282
283 } catch(Exception e) {
284 addMessage("(Mouse)Error:" + e + ", " + evt);
285 }
286 }
287
288 public void mouseReleased(MouseEvent evt) {
289 ;
290 }
291 public void itemStateChanged(ItemEvent evt) {
292 String name = cmboGame.getSelectedItem();
293 if(name.equals("New"))
294 editGames();
295 }
296
297 private void about() {
298 about ab = new about(this, true,
299 "Version", version);
300 }
301
302 public void actionPerformed(ActionEvent evt) {
303 String cmd = evt.getActionCommand();
304 Object ob = evt.getSource();
305 if(cmd.equals("Quit"))
306 quit();
307 else if(cmd.equals("About"))
308 about();
309 else if(cmd.equals("Build Factory"))
310 startBuildFactory();
311 else if(cmd.equals("Test Factory")) {
312 showFactoryTest();
313 } else if(cmd.equals("TestShip")) {
314 try {
315 if(socket == null) return;
316 setStatus("Querying server for test ship");
317 objCommand ocmd = new objCommand("build");
318 ocmd.addArg("testship");
319 netPacket np = new netPacket(new cmdId("TestShip"),
320 ocmd,
321 netPacket.CLIENT);
322 socket.send(np);
323 } catch(Exception e) { addMessage(e.toString()); }
324
325 } else if(cmd.equals("Connect")) {
326 String key = new String("game/" +
327 cmboGame.getSelectedItem());
328 currentGame = res.getGame(key);
329 if(currentGame == null) return;
330 addMessage("Connecting to " + currentGame.getGame());
331 startGame();
332
333 } else if(cmd.equals("Disconnect")) {
334 try {
335 addMessage("Logging off");
336 netPacket np = new netPacket(new cmdId("Quit"),
337 new objCommand("Quit"),
338 netPacket.CLIENT);
339 socket.send(np);
340 } catch(Exception e) {
341 addMessage("Error logging off::" + e);
342 }
343 } else if(cmd.equals("Who")) {
344 try {
345 setStatus("Getting Who list");
346 objCommand obc = new objCommand("get");
347 obc.addArg("session_list");
348 netPacket np = new netPacket(new cmdId("session_list"),
349 obc,
350 netPacket.CLIENT);
351 socket.send(np);
352 } catch(Exception e) {
353 addMessage("Error logging off::" + e);
354 }
355 } else if(ob == txtBCast) {
356 sendBroadcast(cmd);
357 }
358 }
359
360 public void sendBroadcast(String text) {
361 try {
362 objCommand ob = new objCommand("bcast");
363 ob.addArg(text);
364 netPacket np = new netPacket(new cmdId("bcast"),
365 ob,
366 netPacket.CLIENT);
367 socket.send(np);
368 txtBCast.setText("");
369 } catch(Exception e) {
370 addMessage("Error sending broadcast:" + e);
371 }
372 }
373
374 private void startGame() {
375 if(currentGame == null) return;
376
377 hostname = currentGame.getHostName();
378 port = currentGame.getPort();
379 racepass = currentGame.getRacePass();
380 govpass = currentGame.getGovPass();
381
382 try {
383 socket = new objSocket();
384 socket.addObserver(this);
385 socket.setLogin(new login(racepass, govpass));
386
387 Thread th = new Thread(socket, "OBJSocket");
388 socket.setThread(th);
389 try {
390 socket.connect(hostname, port);
391 } catch(Exception e) {
392 addMessage("Connecting Error::" + e);
393 socket = null;
394 return;
395 }
396 if(socket.getStatus() != 0)
397 addMessage("Obj connection failed");
398 else {
399 th.start();
400 busy = true;
401 //netBug = new netBug(this);
402 //pnlNetBug.add(netBug);
403 busy = true;
404 }
405 } catch(Exception e) {
406 addMessage("Connect Error::" + e);
407 }
408 }
409
410 private void quit() {
411 if(socket != null) {
412 try {
413 addMessage("Logging off");
414 netPacket np = new netPacket(new cmdId("Action_Quit"),
415 new objCommand("Quit"),
416 netPacket.CLIENT);
417 socket.send(np);
418 socket.closeConnections();
419
420 } catch(Exception e) {
421 addMessage("Error logging off::" + e);
422 }
423 }
424 System.exit(0);
425 }
426
427 private void myInit() {
428 try {
429 res = new ResourceFile(".ngbrc");
430 } catch(Exception e) {
431 addMessage("No resource file");
432 }
433 lstMsg.setForeground (java.awt.Color.white);
434 lstMsg.setBackground (java.awt.Color.black);
435
436 txtBCast = new TextField("", 80);
437 txtBCast.addActionListener(this);
438 txtBCast.setForeground (java.awt.Color.white);
439 txtBCast.setBackground (java.awt.Color.black);
440
441 panel5.add(txtBCast, "South");
442
443 setListeners();
444 buildMenus();
445 setLabels();
446 setPopup();
447 setPanels();
448 setGames();
449 setupStatus();
450 setSize(currentSize);
451 doLayout();
452 utils.setColors(this, Color.white, Color.black);
453 show();
454 setSize(currentSize.width-10, currentSize.height-10);
455 setSize(currentSize);
456 //doLayout();
457 addMessage("Ready to rock!");
458 }
459
460 public void resetSize() {
461 setSize(currentSize.width-10, currentSize.height-10);
462 setSize(currentSize);
463 }
464
465 private void setPopup() {
466 popup = new PopupMenu();
467 Menu mnu = new Menu("Commands");
468
469 Menu mn2 = new Menu("Test");
470 newMenuItem(mn2, "TestShip");
471 newMenuItem(mn2, "Test Factory");
472 newMenuItem(mn2, "Build Factory");
473 mnu.add(mn2);
474
475 popup.add(mnu);
476 }
477
478 public PopupMenu getPopup() { return popup; }
479
480 public objSocket getSocket() { return socket; }
481
482 private void newMenuItem(Menu mnu, String txt) {
483 MenuItem mit = new MenuItem(txt);
484 mit.addActionListener(this);
485 mnu.add(mit);
486 }
487
488 public void setGames() {
489 GameData gd;
490 Resource resource;
491
492 cmboGame.removeAll();
493 cmboGame.setBackground(Color.black);
494 cmboGame.addItem("New");
495 res.reset();
496 while((resource = res.next()) != null) {
497 if(resource.getKey().startsWith("game")) {
498 gd = (GameData)resource.getResource();
499 cmboGame.addItem(gd.getGame());
500 }
501 }
502 cmboGame.select("New");
503 cmboGame.addItemListener(this);
504
505 }
506
507 private void editGames() {
508 frmLogin frm = new frmLogin(this, res);
509 }
510
511 public void addMessage(String msg) {
512 if(msg.startsWith("Querying") ||
513 msg.startsWith("Building"))
514 setStatus(msg);
515 else {
516 lstMsg.add(msg);
517 lstMsg.makeVisible(lstMsg.getItemCount()-1);
518 }
519 }
520
521 private void setPanels() {
522 remove(pnlCenter);
523
524 remove(pnlLeft);
525 leftScroll = new ScrollPane();
526 leftScroll.setSize(leftSize);
527
528 remove(pnlRight);
529 rightScroll = new ScrollPane();
530 rightScroll.setSize(rightSize);
531
532 splashPanel splash = new splashPanel("splash.gif",
533 centerSize);
534 splash.addMouseListener(this);
535 center = (Component)splash;
536 add(center, "Center");
537
538 leftScroll.add(new splashPanel("splash.gif", leftSize));
539 rightScroll.add(new splashPanel("splash.gif", rightSize));
540
541 try {
542 pnlNav = new pnlNav(this);
543 pnlNav.doLayout();
544 pnlCenterLow.remove(pnlTemp);
545 pnlCenterLow.add(pnlNav, "Center");
546 Dimension dm = lblTip.getSize();
547 Dimension ndm = pnlNav.getSize();
548 pnlCenterLow.doLayout();
549 //pnlNav.setVisible(false);
550 panel4.doLayout();
551 lstMsg.setBackground(Color.black);
552 panel3.setBackground(Color.black);
553 doLayout();
554 } catch(Exception e) {
555 addMessage("setPanels:" + e);
556 }
557 }
558
559 private void setLabels() {
560 lblFlash.setBackground(Color.lightGray);
561 lblFlash.setForeground(Color.black);
562 lblStatus.setBackground(Color.black);
563 lblStatus.setForeground(Color.yellow);
564 lblTip.setBackground(Color.lightGray);
565 lblTip.setForeground(Color.black);
566 }
567
568 private void buildMenus() {
569 MenuItem mit = new MenuItem("Connect");
570 mit.addActionListener(this);
571 mnuFile.add(mit);
572 mit = new MenuItem("Quit");
573 mit.addActionListener(this);
574 mnuFile.add(mit);
575
576 Menu mnu2 = new Menu("Commands");
577 newMenuItem(mnu2, "Who");
578 newMenuItem(mnu2, "TestShip");
579 newMenuItem(mnu2, "Test Factory");
580 newMenuItem(mnu2, "Build Factory");
581 menuBar1.add(mnu2);
582
583 Menu mnu = new Menu("Help");
584 newMenuItem(mnu, "About");
585 menuBar1.add(mnu);
586
587 cmboGame.add("Games");
588 }
589
590 private void setListeners() {
591 btnConnect.addActionListener(this);
592 btnConnect.setBackground(Color.black);
593 btnDisconnect.addActionListener(this);
594 btnDisconnect.setBackground(Color.black);
595 btnQuit.addActionListener(this);
596 btnQuit.setBackground(Color.black);
597 addComponentListener(this);
598 }
599
600 Hashtable stars, planets, ships;
601 governor_remote gov;
602 star_remote homeStar;
603 planet_remote homePlanet;
604
605 public Hashtable getStars() { return stars; }
606 public Hashtable getPlanets() { return planets; }
607 public Hashtable getShips() { return ships; }
608 public governor_remote getGovernor() { return gov;}
609
610 private void getStartupInfo() {
611 try {
612 busy = true;
613 addMessage("Initializing with server...");
614 // get all stars
615 stars = new Hashtable();
616 planets = new Hashtable();
617 ships = new Hashtable();
618
619 Vector objs = new Vector();
620 netPacket np = new netPacket(new cmdId("startup"), netPacket.CLIENT);
621
622 objCommand cmd = new objCommand("get");
623 cmd.addArg("gov");
624 objs.addElement(cmd);
625
626 cmd = new objCommand("get");
627 cmd.addArg("star");
628 cmd.addArg("all");
629 objs.addElement(cmd);
630
631 cmd = new objCommand("get");
632 cmd.addArg("session_list");
633 objs.addElement(cmd);
634
635 np.setObjects(objs);
636 socket.send(np);
637 setStatus("Getting universe..wait");
638
639 } catch(Exception e) {
640 addMessage("Startup:" + e);
641 }
642 }
643
644 private void getHomeStar() {
645 try {
646 busy = true;
647 // get home star complete
648 Vector objs = new Vector();
649 objCommand cmd = new objCommand("get");
650 cmd.addArg("star");
651
652 planet_remote pl = null;
653 try {
654 pl = gov.getDefPlanet();
655 if(pl == null) pl.getName();
656 } catch(Exception e) {
657 addMessage("Error getting home planet");
658 return;
659 }
660 cmd.addArg(pl.getStar().getDBName());
661 objs.addElement(cmd);
662
663 cmd = new objCommand("get");
664 cmd.addArg("planet");
665 cmd.addArg(pl.getDBName());
666 objs.addElement(cmd);
667
668 netPacket np = new netPacket(new cmdId("home"), netPacket.CLIENT);
669 np.setObjects(objs);
670 socket.send(np);
671 } catch(Exception e) {
672 addMessage("getHomeStar:" + e);
673 }
674 }
675
676 public void showHomePlanet() {
677 showPlanet(homePlanet);
678 }
679
680 public void getPlanet(planet_remote pl) {
681 try {
682 busy = true;
683 objCommand cmd = new objCommand("get");
684 cmd.addArg("planet");
685 cmd.addArg(pl.getDBName());
686 if(getSocket() != null)
687 getSocket().send(new netPacket(new cmdId("showPlanet"), cmd, netPacket.CLIENT));
688 else
689 addMessage("getPlanet:Not connected");
690 } catch(Exception e) { addMessage("getSystem:" + e); }
691
692 }
693
694 public void showFactoryTest() {
695 addMessage("Showing factory");
696 remove(center);
697 factoryArea fa = new factoryArea();
698 add(fa, "Center");
699 center = (Component)fa;
700 doLayout();
701 resetSize();
702 center.repaint();
703 pnlNav.resetNav(false);
704 busy = false;
705 }
706
707 public void showPlanet(planet_remote pl) {
708 addMessage("Building map for:" + pl.getName());
709 remove(center);
710 planetArea pa = null;
711 try {
712 pa = new planetArea(this, pl,
713 new Dimension(getSize().width, centerSize.height));
714 } catch(Exception e) {
715 addMessage("showPlanet(area):" + e);
716 return;
717 }
718 add(pa, "Center");
719 center = (Component)pa;
720 doLayout();
721 //pack();
722 resetSize();
723 center.repaint();
724 try {
725 pnlNav.setCurrent(new location(pl));
726 } catch(Exception e) {addMessage("showPlanet:" + e);}
727 //pack();
728 busy = false;
729 }
730
731 public void showHomeSystem() { showSystem(homeStar); }
732
733 public void getSystem(star_remote star) {
734 // this is a shallow copy, we need a deep copy
735 try {
736 busy = true;
737 objCommand cmd = new objCommand("get");
738 cmd.addArg("star");
739 cmd.addArg(star.getDBName());
740 if(getSocket() != null)
741 getSocket().send(new netPacket(new cmdId("showStar"), cmd, netPacket.CLIENT));
742 else
743 addMessage("getSystem:Not connected");
744 } catch(Exception e) { addMessage("getSystem:" + e); }
745
746 }
747
748 public void showSystem(star_remote star) {
749 try {
750 addMessage("Building map for:" + star.getName());
751 systemArea sys = new systemArea(this, star, centerSize);
752 remove(center);
753 center = (Component)sys;
754 add(center);
755 pnlNav.setCurrent(new location(star));
756 doLayout();
757 pack();
758 resetSize();
759 busy = false;
760 } catch(Exception e) {
761 addMessage("showSystem():" + e);
762 return;
763 }
764 }
765
766 public void showRace(race_remote race) {
767 try {
768 addMessage("Displaying Race:" + race.getName());
769 raceArea ra = new raceArea(this, race, pnlNav.getCurrent());
770
771 remove(center);
772 center = (Component)ra;
773 add(center);
774 doLayout();
775 pack();
776 resetSize();
777 pnlNav.resetNav(false);
778 busy = false;
779 } catch(Exception e) {
780 addMessage("showRace():" + e);
781 return;
782 }
783 }
784
785 public void showUniverse() {
786 try {
787 addMessage("Building universe");
788 universeArea un = new universeArea(this, centerSize);
789 remove(center);
790 center = (Component)un;
791 add(center);
792 pnlNav.setCurrent(new location());
793 doLayout();
794 resetSize();
795 busy = false;
796 } catch(Exception e) {
797 addMessage("showUniverse():" + e);
798 return;
799 }
800 }
801
802 public void showShip(ship_remote ship) {
803 try {
804 addMessage("Getting ship:" + ship.getDBName());
805 setStatus("Displaying ship:" + ship.getName());
806
807 shipArea sa = new shipArea(this, ship);
808 remove(center);
809 center = (Component)sa;
810 add(center);
811 doLayout();
812 pack();
813 resetSize();
814 pnlNav.resetNav(false);
815 busy = false;
816 } catch(Exception e) {
817 addMessage("showShip():" + e);
818 return;
819 }
820 }
821
822 public void showLocation(location loc) {
823 try {
824 addMessage("Going back");
825 if(loc.inStarSystem().booleanValue()) {
826 if(loc.isOrbiting().booleanValue())
827 getPlanet(loc.getPlanetRemoteOrbiting());
828 else
829 getSystem(loc.getStarRemoteSystem());
830 } else
831 showUniverse();
832 } catch(Exception e) {
833 addMessage("showLocation():" + e);
834 return;
835 }
836 }
837
838 public void update(Observable oB, Object arg) {
839 try {
840 if(oB instanceof objSocket) {
841 if(arg instanceof String) { // message from objSocket
842 String msg = (String)arg;
843 addMessage("Server:" + msg);
844 if(msg.equals("Going Down!"))
845 socket.closeConnections();
846 return;
847 }
848 netPacket np = (netPacket)arg;
849 if(np.getObjects().size() == 0) {
850 addMessage("No object in netPacket");
851 return;
852 }
853 Object b = np.getObjects().elementAt(0);
854 if(b instanceof results) {
855 cmdId id = np.getId();
856 //System.err.println("id=" + id.getId());
857 results res = (results)b;
858 if(id.getId().equals("startup")) {
859 if(!(res.getErrorCode().equals(results.SUCCESS))) {
860 addMessage("Error in startup:" + res.getErrorString());
861 return;
862 }
863 if(res.getResultObjects().size() == 0) {
864 addMessage("Error in startup:no object");
865 return;
866 }
867 Enumeration en = res.getResultObjects().elements();
868 while(en.hasMoreElements()) {
869 Object ob = en.nextElement();
870 if(ob instanceof governor_remote) {
871 gov = (governor_remote)ob;
872 addMessage("You are:" + gov.getName() +
873 " of race:" + gov.getRace().getName());
874 status.setBase("Logged in as:" + gov.getRace().getName() +
875 "/" + gov.getName());
876 setStatus("");
877 getHomeStar();
878 pnlNav.setRace(gov.getRace());
879 pnlCenterLow.doLayout();
880 } else if(ob instanceof star_remote) {
881 if(stars == null)
882 stars = new Hashtable();
883 star_remote star = (star_remote)ob;
884 stars.put(star.getDBName(), star);
885 setStatus("Got star:" + star.getName());
886 }
887 }
888 if(stars.size() > 0) pnlNav.setStars();
889 getRaces();
890 return;
891 } else if(id.getId().equals("home")) {
892 if(!(res.getErrorCode().equals(results.SUCCESS))) {
893 addMessage("Error getting home:" + res.getErrorString());
894 return;
895 }
896 if(res.getResultObjects().size() == 0) {
897 addMessage("Error getting home:no object");
898 return;
899 }
900 Enumeration en = res.getResultObjects().elements();
901 while(en.hasMoreElements()) {
902 Object ob = en.nextElement();
903 if(ob instanceof planet_remote) {
904 homePlanet = (planet_remote)ob;
905 } else if(ob instanceof star_remote) {
906 homeStar = (star_remote)ob;
907 }
908 }
909 // this is a complete star
910 if(homePlanet != null)
911 showPlanet(homePlanet);
912
913 } else if(id.getId().equals("showStar")) {
914 if(!(res.getErrorCode().equals(results.SUCCESS))) {
915 addMessage("Error getting home:" + res.getErrorString());
916 return;
917 }
918 if(res.getResultObjects().size() == 0) {
919 addMessage("Error getting star:no object");
920 return;
921 }
922 Enumeration en = res.getResultObjects().elements();
923 star_remote star = (star_remote)res.getResultObjects().elementAt(0);
924 try {
925 showSystem(star);
926 pnlNav.setStarList(star.getName());
927 } catch(Exception e) { addMessage("Bad star:" + e); }
928 } else if(id.getId().equals("showPlanet")) {
929 if(!(res.getErrorCode().equals(results.SUCCESS))) {
930 addMessage("Error getting planet:" + res.getErrorString());
931 return;
932 }
933 if(res.getResultObjects().size() == 0) {
934 addMessage("Error getting planet:no object");
935 return;
936 }
937 Enumeration en = res.getResultObjects().elements();
938 planet_remote planet = (planet_remote)res.getResultObjects().elementAt(0);
939 try {
940 showPlanet(planet);
941
942 } catch(Exception e) { addMessage("Bad planet:" + e); }
943 } else if(id.getId().equals("TestShip")) {
944 if(!(res.getErrorCode().equals(results.SUCCESS))) {
945 addMessage("Error getting testship:" + res.getErrorString());
946 return;
947 }
948 if(res.getResultObjects().size() == 0) {
949 addMessage("Error getting testship:no object");
950 return;
951 }
952 ship_remote ship = (ship_remote)res.getResultObjects().elementAt(0);
953 showShip(ship);
954 } else if(id.getId().equals("races")) {
955 if(!(res.getErrorCode().equals(results.SUCCESS))) {
956 addMessage("Error getting races:" + res.getErrorString());
957 return;
958 }
959 if(res.getResultObjects().size() == 0) {
960 addMessage("Error getting races:no object");
961 return;
962 }
963 setRaces(res.getResultObjects());
964 } else if(id.getId().equals("session_list")) {
965 if(!(res.getErrorCode().equals(results.SUCCESS))) {
966 addMessage("Error getting session list:" + res.getErrorString());
967 return;
968 }
969 if(res.getResultObjects().size() == 0) {
970 addMessage("Error getting session list:no object");
971 return;
972 }
973 sessionList = (Vector)res.getResultObjects().elementAt(0);
974 showSessions();
975 } else if(id.getId().equals("bcast")) {
976 if(!(res.getErrorCode().equals(results.SUCCESS))) {
977 addMessage("Error getting broadcast:" + res.getErrorString());
978 return;
979 }
980 if(res.getResultObjects().size() != 1) {
981 addMessage("Error getting broadcast:no object");
982 return;
983 }
984 String text = (String)res.getResultObjects().elementAt(0);
985 addMessage("=:" + text);
986 } else if(id.getId().equals("updateTime")) {
987 if(!(res.getErrorCode().equals(results.SUCCESS))) {
988 addMessage("Error getting time update:" + res.getErrorString());
989 return;
990 }
991 if(res.getResultObjects().size() != 1) {
992 addMessage("Error getting time update:no object");
993 return;
994 }
995 String text = (String)res.getResultObjects().elementAt(0);
996 lblFlash.setText("Universe Time: [" + text + "]");
997 } else if(id.getId().equals("build")) {
998 if(!(res.getErrorCode().equals(results.SUCCESS))) {
999 addMessage("Error building:" + res.getErrorString());
1000 return;
1001 }
1002 if(res.getResultObjects().size() != 1) {
1003 addMessage("Error getting results:no object");
1004 return;
1005 }
1006 String text = res.getResultString();
1007 addMessage("Build complete: " + text);
1008 }
1009 } else if(b instanceof String) {
1010 addMessage((String)b + "\n");
1011 if(b.equals("LOGGED IN"))
1012 getStartupInfo();
1013 }
1014 return;
1015 }
1016 } catch(Exception e) {
1017 addMessage("Error reading netPacket::" + e);
1018 return;
1019 }
1020 }
1021
1022 public void startBuildFactory() {
1023 if(!(center instanceof planetArea)) {
1024 addMessage("Must be on a planet to build a factory");
1025 return;
1026 }
1027 planetArea pa = (planetArea)center;
1028 pa.getPlanetInfo().getCurrentSector(this);
1029 sectorSelectedFor = SECTOR_BUILD_FACTORY;
1030 }
1031
1032 public void buildFactory(location loc) {
1033 try {
1034 objCommand cmd = new objCommand("build");
1035 cmd.addArg("Factory");
1036 cmd.addArg(loc);
1037 if(getSocket() != null)
1038 getSocket().send(new netPacket(new cmdId("build"), cmd, netPacket.CLIENT));
1039 else
1040 addMessage("build factory:Not connected");
1041
1042 } catch(Exception e) {
1043 addMessage("Error sending build command:" + e);
1044 }
1045 }
1046
1047
1048 public void showSessions() {
1049 try {
1050 Enumeration en = sessionList.elements();
1051 addMessage("Logged on:");
1052 while(en.hasMoreElements()) {
1053 session sr = (session)en.nextElement();
1054 addMessage(sr.toString());
1055 }
1056 setStatus("");
1057 } catch(Exception e) {
1058 addMessage("Error showing sessions:" + e);
1059 }
1060 }
1061
1062 public void updateRace(race_remote rr) {
1063 try {
1064 busy = true;
1065 objCommand cmd = new objCommand("update");
1066 cmd.addArg("race");
1067 cmd.addArg(rr);
1068 if(getSocket() != null)
1069 getSocket().send(new netPacket(new cmdId("update_race"), cmd, netPacket.CLIENT));
1070 else
1071 addMessage("updateRace:Not connected");
1072 } catch(Exception e) { addMessage("updateRace:" + e); }
1073 }
1074
1075 public void getRaces() {
1076 try {
1077 busy = true;
1078 objCommand cmd = new objCommand("get");
1079 cmd.addArg("races");
1080 if(getSocket() != null)
1081 getSocket().send(new netPacket(new cmdId("races"), cmd, netPacket.CLIENT));
1082 else
1083 addMessage("getRaces:Not connected");
1084 } catch(Exception e) { addMessage("getRaces:" + e); }
1085 }
1086 Vector races;
1087 public void setRaces(Vector rcs) {
1088 races = rcs;
1089 pnlNav.setRaces(races);
1090 }
1091
1092 public void setupStatus() {
1093 status = new status(this, "Not Logged In");
1094 panel4.remove(lblStatus);
1095 panel4.add(status, "South");
1096 }
1097
1098 public void setStatus(String msg) {
1099 status.setMessage(msg);
1100 }
1101
1102 public String getBuiltship() { return builtship; }
1103
1104 public void componentMoved(ComponentEvent evt) {;}
1105 public void componentShown(ComponentEvent evt) {;}
1106 public void componentHidden(ComponentEvent evt) {;}
1107
1108 static boolean first = true;
1109 public void componentResized(ComponentEvent evt) {
1110 if(first) {
1111 first = false;
1112 return;
1113 }
1114 currentSize = getSize();
1115 }
1116
1117 public static void main(java.lang.String[] args) {
1118 new frmClient ();
1119 }
1120
1121}