1 package org.cyberiantiger.mudclient;
2
3 import java.util.*;
4 import java.io.*;
5 import org.cyberiantiger.console.*;
6 import org.cyberiantiger.mudclient.config.*;
7 import org.cyberiantiger.mudclient.parser.*;
8 import org.cyberiantiger.mudclient.net.*;
9 import org.cyberiantiger.mudclient.ui.ControlWindow;
10 import org.cyberiantiger.mudclient.ui.Connection;
11
12 public class ElephantMudClient implements Display, Connection {
13
14 private boolean echo = true;
15 private ControlWindow control;
16 private MudConnection connection;
17 private ConsoleWriter writer;
18
19 private ClientConfiguration config;
20
21 public ElephantMudClient(ClientConfiguration config) {
22 this.config = config;
23 writer = new ElephantConsoleWriter();
24 connection = new MudConnection(this);
25 control = new ControlWindow(this);
26 control.show();
27 }
28
29 public void exit() {
30 connection.disconnect();
31 connection.stop(); // Deprecated.
32 control.hide();
33 System.exit(0); // Don't like using this method.
34 }
35
36 public void connect() {
37 connection.setParser(new ANSIParser());
38 connection.connect();
39 }
40
41 public void disconnect() {
42 connection.disconnect();
43 }
44
45
46 public void command(String sourceId, String msg) {
47 connection.command(msg);
48 if(echo) {
49 ConsoleWriter ui = control.getCurrentView();
50 ui.consoleAction(
51 new StringConsoleAction(msg.toCharArray(),0,msg.length())
52 );
53 ui.consoleAction(
54 new SetCursorXConsoleAction(0)
55 );
56 ui.consoleAction(
57 new MoveCursorYConsoleAction(1)
58 );
59 }
60 }
61
62 public void setWindowSize(int w, int h) {
63 connection.setWindowSize(w,h);
64 }
65
66 public void connectionStatusChanged(int newStatus) {
67 control.connectionStatusChanged(newStatus);
68 }
69
70 public void connectionDoLocalEcho(boolean echo) {
71 this.echo = echo;
72 }
73
74 public ClientConfiguration getConfiguration() {
75 return config;
76 }
77
78 public ConsoleWriter getConsoleWriter() {
79 return writer;
80 }
81
82 private class ElephantConsoleWriter implements ConsoleWriter {
83
84 protected ConsoleWriter getView(String name) {
85 if(name.equals(ClientConfiguration.DEFAULT_VIEW)) {
86 return control.getDefaultView();
87 } else if(name.equals(ClientConfiguration.CURRENT_VIEW)) {
88 return control.getCurrentView();
89 } else {
90 return control.getView(name);
91 }
92 }
93
94 public void consoleAction(ConsoleAction action) {
95 if(action instanceof ElephantMUDConsoleAction) {
96 ElephantMUDConsoleAction eAction =
97 (ElephantMUDConsoleAction) action;
98
99 String pClass = eAction.getPrimaryClass();
100
101 Set dests = config.getOutputFor(pClass);
102
103
104 if(dests == null) {
105 control.getDefaultView().consoleAction(action);
106 } else {
107 Set tmp = new HashSet();
108 Iterator i = dests.iterator();
109 while(i.hasNext()) {
110 tmp.add(getView((String)i.next()));
111 }
112
113 tmp.remove(null);
114
115 i = tmp.iterator();
116 while(i.hasNext()) {
117 ((ConsoleWriter)i.next()).consoleAction(action);
118 }
119 }
120
121 } else {
122 control.getDefaultView().consoleAction(action);
123 }
124 }
125 }
126
127 public static void main(String[] args) {
128 if(args.length == 1) {
129 try {
130 ClientConfiguration config = new ClientConfiguration();
131 config.load(new FileInputStream(args[0]));
132 new ElephantMudClient(config);
133 } catch (IOException ioe) {
134 ioe.printStackTrace();
135 }
136 } else {
137 try {
138 ClientConfiguration config = new ClientConfiguration();
139 config.load(
140 ElephantMudClient.class.getResourceAsStream(
141 "/org/cyberiantiger/mudclient/config.properties"
142 )
143 );
144 new ElephantMudClient(config);
145 } catch (IOException ioe) {
146 ioe.printStackTrace();
147 }
148 }
149 }
150 }
This page was automatically generated by Maven