1 /*** 2 * Redistribution and use in source and binary forms, with or without 3 * modification, are permitted provided that the following conditions are 4 * met : 5 * 6 * . Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * 9 * . Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * . The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 25 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 * 28 * $Id: ClientFacade.java,v 1.3 2005/09/07 23:34:27 mat007 Exp $ 29 */ 30 31 package jtge.sample.chat.client.core; 32 33 import jtge.engine.data.Context; 34 import jtge.engine.data.IContext; 35 import jtge.engine.handler.Executor; 36 import jtge.engine.io.IStatusObserver; 37 import jtge.engine.io.ObjectInputOutputFactory; 38 import jtge.engine.net.Client; 39 import jtge.engine.security.ILoginView; 40 import jtge.engine.security.LoginOrder; 41 import jtge.engine.user.IUser; 42 import jtge.engine.user.Player; 43 import jtge.sample.chat.common.core.IMessageView; 44 import jtge.sample.chat.common.core.command.MessageOrder; 45 46 /*** 47 * Provides a client facade. 48 * 49 * @author Mathieu Champlon 50 * @version $Revision: 1.3 $ $Date: 2005/09/07 23:34:27 $ 51 */ 52 public class ClientFacade implements IController 53 { 54 private final Client client; 55 private final IContext context; 56 private IUser user; 57 58 /*** 59 * Create a client. 60 */ 61 public ClientFacade() 62 { 63 context = new Context(); 64 client = new Client( new Executor( context ), new ObjectInputOutputFactory() ); 65 } 66 67 /*** 68 * {@inheritDoc} 69 */ 70 public final void register( final IStatusObserver view ) 71 { 72 client.register( view ); 73 } 74 75 /*** 76 * {@inheritDoc} 77 */ 78 public final void register( final IMessageView view ) 79 { 80 context.put( IMessageView.class, view ); 81 } 82 83 /*** 84 * {@inheritDoc} 85 */ 86 public final void register( final ILoginView view ) 87 { 88 context.put( ILoginView.class, view ); 89 } 90 91 /*** 92 * {@inheritDoc} 93 */ 94 public final void open( final String host, final int port ) 95 { 96 client.open( host, port ); 97 } 98 99 /*** 100 * {@inheritDoc} 101 */ 102 public final void login( final String name ) 103 { 104 user = new Player( name ); 105 client.handle( new LoginOrder( user ) ); 106 } 107 108 /*** 109 * {@inheritDoc} 110 */ 111 public final void send( final String message ) 112 { 113 client.handle( new MessageOrder( user, message ) ); 114 } 115 116 /*** 117 * {@inheritDoc} 118 */ 119 public final void close() 120 { 121 user = null; 122 client.close(); 123 } 124 }