Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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}