/* * Created by IntelliJ IDEA. * User: rkinney * Date: Jul 23, 2002 * Time: 6:04:16 AM * To change template for new class use * Code Style | Class Templates options (Tools | IDE Options). */ package VASSAL.chat.peer2peer; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Date; import VASSAL.chat.ChatServerConnection; import VASSAL.chat.Player; import VASSAL.chat.Room; import VASSAL.command.Command; import VASSAL.command.CommandEncoder; public class TextClient { private boolean reportRooms = true; private ChatServerConnection client; public TextClient(ChatServerConnection client) { this.client = client; client.addPropertyChangeListener(ChatServerConnection.AVAILABLE_ROOMS, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { availableRoomsChanged(evt); } }); client.addPropertyChangeListener(ChatServerConnection.INCOMING_MSG, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { incomingMessageReceived(evt); } }); client.addPropertyChangeListener(ChatServerConnection.STATUS, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { statusReceived(evt); } }); client.setConnected(true); } public ChatServerConnection getClient() { return client; } private void statusReceived(PropertyChangeEvent evt) { System.out.println(String.valueOf(evt.getNewValue())); //$NON-NLS-1$ } private void incomingMessageReceived(PropertyChangeEvent evt) { String msg = (String) evt.getNewValue(); if (msg.startsWith("CHAT")) { //$NON-NLS-1$ System.out.println(msg.substring(4)); } } private void availableRoomsChanged(PropertyChangeEvent evt) { if (reportRooms) { System.out.println("----------" + (new Date()) + "---------"); //$NON-NLS-1$ //$NON-NLS-2$ System.out.print(report((Room[]) evt.getNewValue())); } } public static String report(Room[] r) { final StringBuilder buffer = new StringBuilder(); for (int i = 0; i < r.length; ++i) { buffer.append(r[i].getName() + ": "); //$NON-NLS-1$ Player[] p = (Player[]) r[i].getPlayerList().toArray(); for (int j = 0; j < p.length; ++j) { buffer.append(p[j]); if (j < p.length - 1) { buffer.append(", "); //$NON-NLS-1$ } } buffer.append("\n"); //$NON-NLS-1$ } return buffer.toString(); } /* public static void main(String[] args) throws Exception { if (args.length == 0) { System.out.println("Usage: -module <module> -name <username> -type <hier|CGI|Brokered|Proxy> -host <host> -port <port>"); System.exit(0); } if (System.getProperty("stderr") != null) { System.setErr(new PrintStream(new FileOutputStream(System.getProperty("stderr")))); } Properties p = new ArgsParser(args).getProperties(); String modName = p.getProperty("module", "test"); String myName = p.getProperty("name", "rk"); String poolType = p.getProperty("type", "Brokered"); String host = p.getProperty("host", "localhost"); int port = Integer.parseInt(p.getProperty("port", "5050")); final BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); final String moduleName = modName; final String userName = myName; MessageBoard msgSvr = new MessageBoard() { public Message[] getMessages() { return new Message[0]; } public void postMessage(String msg) { } }; WelcomeMessageServer welcomer = new WelcomeMessageServer() { public Command getWelcomeMessage() { return new NullCommand(); } }; ChatServerConnection clientConnection; PeerPoolInfo info = new PeerPoolInfo() { public String getModuleName() { return moduleName; } public String getUserName() { return userName; } }; CommandEncoder encoder = new Encoder(); if (poolType.startsWith("hier")) { clientConnection = new SocketNodeClient(encoder, info, host, port, msgSvr, welcomer); } else { PeerPool pool; if ("CGI".equals(poolType)) { pool = new CgiPeerPool(info, "http://www.vassalengine.org/util/"); } else if ("Proxy".equals(poolType)) { pool = new ProxyPeerPool(info, host, port); } else { pool = new BrokeredPeerPool(info, host, port); } clientConnection = new P2PClient(encoder, msgSvr, welcomer, pool); if (pool instanceof BrokeredPeerPool) { final BrokeredPeerPool reportStatus = (BrokeredPeerPool) pool; final ChatServerConnection c = clientConnection; PropertyChangeListener l = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { reportStatus.sendStatus(c, moduleName); } }; clientConnection.addPropertyChangeListener(ChatServerConnection.ROOM, l); clientConnection.addPropertyChangeListener(ChatServerConnection.PLAYER_INFO, l); } } final TextClient client = new TextClient(clientConnection); client.getClient().setUserInfo(new SimplePlayer(userName)); Runnable r = new Runnable() { public void run() { String s; try { while ((s = input.readLine()) != null) { if (s.startsWith("-room")) { client.reportRooms = false; } else if (s.startsWith("+room")) { client.reportRooms = true; } else if (s.startsWith("JOIN")) { s = s.substring("JOIN".length()).trim(); client.getClient().setRoom(new SimpleRoom(s)); } else if (s.startsWith("BYE")) { client.getClient().setConnected(false); } else if (s.startsWith("HELLO")) { client.getClient().setConnected(true); } else if (s.startsWith("SHOUT")) { s = s.substring("SHOUT".length()).trim(); s = "CHAT<" + client.getClient().getUserInfo().getName() + "> - " + s; client.shout(s); } else if (s.startsWith("!")) { try { int length = Integer.parseInt(s.substring(1)); StringBuilder msg = new StringBuilder(); msg.append("CHAT<" + client.getClient().getUserInfo().getName() + "> ("+length+" chars) -"); for (int i=0;i<length;++i) { msg.append((char)('0'+i%10)); } Command c = new ShowText(msg.toString()); client.getClient().sendToOthers(c); client.getClient().sendTo(client.getClient().getUserInfo(),c); } catch (NumberFormatException e) { } } else if (s.length() > 0) { String msg = " - <" + client.getClient().getUserInfo().getName() + "> - " + s; Command c = new ShowText(msg); client.getClient().sendToOthers(c); client.getClient().sendTo(client.getClient().getUserInfo(),c); } } } catch (IOException ex) { ex.printStackTrace(); } } }; new Thread(r).start(); } */ public static class ShowText extends Command { private String msg; public ShowText(String msg) { this.msg = msg; } public String getMessage() { return msg; } protected void executeCommand() { System.out.println(msg); } protected Command myUndoCommand() { return null; } } public static class Encoder implements CommandEncoder { public Command decode(String command) { Command c = null; if (command.startsWith("CHAT")) { //$NON-NLS-1$ c = new ShowText(command.substring(4)); } return c; } public String encode(Command c) { String s = null; if (c instanceof ShowText) { return "CHAT"+((ShowText)c).getMessage(); //$NON-NLS-1$ } return s; } } }