View Javadoc
1 /*** 2 * Copyright (c) 2003 held jointly by the individual authors. 3 * 4 * This library is free software; you can redistribute it and/or modify it 5 * under the terms of the GNU Lesser General Public License as published 6 * by the Free Software Foundation; either version 2.1 of the License, or 7 * (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; with out even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public License 15 * along with this library; if not, write to the Free Software Foundation, 16 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 17 * 18 * > http://www.gnu.org/copyleft/lesser.html 19 * > http://www.opensource.org/licenses/lgpl-license.php 20 */ 21 package net.mlw.gfw.client; 22 23 import java.awt.BorderLayout; 24 import java.awt.Component; 25 import java.io.IOException; 26 import java.util.logging.Logger; 27 28 import javax.swing.JFrame; 29 import javax.swing.JPanel; 30 31 import net.mlw.gfw.Constants; 32 import net.mlw.gfw.event.EventHandlerTypeDelegator; 33 import net.mlw.gfw.event.impl.ConnectEvent; 34 import net.mlw.gfw.event.impl.DisconnectEvent; 35 import net.mlw.gfw.ext.basic.client.component.ChatPanel; 36 import net.mlw.gfw.ext.basic.client.component.PlayerListPanel; 37 import net.mlw.gfw.ext.basic.client.component.ServerOptionsPanel; 38 import net.mlw.gfw.ext.basic.event.ChatEvent; 39 import net.mlw.gfw.server.Server; 40 import net.mlw.gfw.server.impl.AsynchronousServerDecorator; 41 import net.mlw.gfw.server.impl.DefaultServer; 42 import net.mlw.gfw.server.impl.RemoteServer; 43 import net.mlw.gfw.server.impl.ServerEventHandlerTypeDelegator; 44 import net.mlw.gfw.server.impl.ServerSocketDecorator; 45 import net.mlw.gfw.server.impl.SimpleBroadcastConsumer; 46 47 /*** 48 * @author Matthew L. Wilson 49 * @version $Revision: 1.13 $ $Date: 2004/07/01 14:31:41 $ 50 */ 51 public final class ClientUtils 52 { 53 54 private static Logger LOGGER = Logger.getLogger(ClientUtils.class.getName()); 55 56 public static void getDefaultFrameImpl(Component mainComponent, EventHandlerTypeDelegator clientEventHandler) 57 { 58 getDefaultFrameImpl(mainComponent, clientEventHandler, null); 59 } 60 61 public static void getDefaultFrameImpl( 62 Component mainComponent, 63 EventHandlerTypeDelegator clientEventHandler, 64 ServerEventHandlerTypeDelegator serverEventHandler) 65 { 66 Server server = null; 67 JFrame frame = new JFrame(); 68 69 final ServerOptionsPanel options = ServerOptionsPanel.prompt(frame); 70 71 SimpleBroadcastConsumer sbc = new SimpleBroadcastConsumer(); 72 73 switch (options.getMode()) 74 { 75 case Constants.SERVER_NONE : 76 LOGGER.info("starting a local server."); 77 78 DefaultServer nserver = new DefaultServer(serverEventHandler); 79 nserver.addEventHandler(ConnectEvent.class, sbc); 80 nserver.addEventHandler(DisconnectEvent.class, sbc); 81 nserver.addEventHandler(ChatEvent.class, sbc); 82 server = nserver; 83 84 break; 85 86 case Constants.SERVER_LOCAL : 87 LOGGER.info("starting a local server, with a listening port."); 88 DefaultServer lserver = new DefaultServer(serverEventHandler); 89 lserver.addEventHandler(ConnectEvent.class, sbc); 90 lserver.addEventHandler(DisconnectEvent.class, sbc); 91 lserver.addEventHandler(ChatEvent.class, sbc); 92 server = lserver; 93 94 final ServerSocketDecorator socket = new ServerSocketDecorator(server); 95 socket.setPort(options.getPort()); 96 Thread lthread = new Thread(new Runnable() 97 { 98 99 public void run() 100 { 101 try 102 { 103 socket.accept(); 104 } 105 catch (IOException e) 106 { 107 e.printStackTrace(); 108 } 109 } 110 }); 111 lthread.setDaemon(true); 112 lthread.start(); 113 break; 114 115 case Constants.SERVER_REMOTE : 116 LOGGER.info("Connecting to a remote server."); 117 try 118 { 119 final RemoteServer remote = new RemoteServer(); 120 remote.setPort(options.getPort()); 121 remote.setHost(options.getHost()); 122 Thread clientThread = new Thread(new Runnable() 123 { 124 125 public void run() 126 { 127 try 128 { 129 remote.listen(); 130 } 131 catch (Exception e) 132 { 133 e.printStackTrace(); 134 } 135 } 136 }); 137 clientThread.setDaemon(true); 138 clientThread.start(); 139 while (!remote.isListening()) 140 { 141 Thread.sleep(100); 142 } 143 server = remote; 144 } 145 catch (Exception e) 146 { 147 e.printStackTrace(); 148 } 149 break; 150 } 151 152 ClientContext clientContext = new ClientContext(options.getUserName()); 153 154 ChatPanel chatPanel = new ChatPanel(); 155 chatPanel.init(clientContext); 156 157 JPanel topPanel = new JPanel(new BorderLayout()); 158 PlayerListPanel playerList = new PlayerListPanel(); 159 playerList.init(clientContext); 160 topPanel.add(mainComponent, BorderLayout.CENTER); 161 162 JPanel southPanel = new JPanel(new BorderLayout()); 163 southPanel.add(playerList, BorderLayout.EAST); 164 southPanel.add(chatPanel, BorderLayout.CENTER); 165 166 chatPanel.addEventHandler(server); 167 if (mainComponent instanceof ClientEventHandler) 168 { 169 ((ClientEventHandler) mainComponent).init(clientContext); 170 ((ClientEventHandler) mainComponent).addEventHandler(server); 171 } 172 173 frame.getContentPane().add(topPanel, BorderLayout.CENTER); 174 frame.getContentPane().add(southPanel, BorderLayout.SOUTH); 175 176 frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 177 frame.pack(); 178 frame.setVisible(true); 179 180 clientEventHandler.addEventHandler(ConnectEvent.class, playerList); 181 clientEventHandler.addEventHandler(DisconnectEvent.class, playerList); 182 clientEventHandler.addEventHandler(ChatEvent.class, chatPanel); 183 184 server.addClient(clientContext.getUserName(), clientEventHandler); 185 } 186 187 public static Server startServer(final ServerOptionsPanel options, Class server) throws InstantiationException, IllegalAccessException 188 { 189 switch (options.getMode()) 190 { 191 case Constants.SERVER_LOCAL : 192 LOGGER.info("Starting a local server, with a listening port."); 193 final ServerSocketDecorator socketDecorator = new ServerSocketDecorator((Server) server.newInstance()); 194 195 socketDecorator.setPort(options.getPort()); 196 Thread lthread = new Thread(new Runnable() 197 { 198 199 public void run() 200 { 201 try 202 { 203 socketDecorator.accept(); 204 } 205 catch (IOException e) 206 { 207 e.printStackTrace(); 208 } 209 } 210 }); 211 lthread.setDaemon(true); 212 lthread.start(); 213 214 //Commented out so that a local client stil connects through the port. 215 //return socketDecorator; 216 217 case Constants.SERVER_REMOTE : 218 LOGGER.info("Connecting to a remote server."); 219 RemoteServer remoteServer = new RemoteServer(options.getHost(), options.getPort()); 220 remoteServer.spawnThreadAndlisten(); 221 return remoteServer; 222 223 default : 224 LOGGER.info("Starting a local server: (" + server + ")"); 225 226 Server serverImpl = (Server) server.newInstance(); 227 AsynchronousServerDecorator asynchronousServer = new AsynchronousServerDecorator(serverImpl); 228 asynchronousServer.start(); 229 return asynchronousServer; 230 231 } 232 233 } 234 }

This page was automatically generated by Maven