1 22 23 package client; 24 25 import javax.net.ssl.*; 26 import java.io.BufferedInputStream ; 27 import java.io.BufferedOutputStream ; 28 import java.io.ObjectOutputStream ; 29 import java.io.ObjectInputStream ; 30 import java.io.IOException ; 31 import java.lang.ClassNotFoundException ; 32 import javax.swing.JOptionPane ; 33 34 import common.*; 35 import common.sd.*; 36 37 38 43 public class ServerConnection implements Runnable , SocketConnection { 44 45 private LlamaChat client; 46 private SSLSocket socket; 47 private ObjectOutputStream out; 48 private ObjectInputStream in; 49 public boolean connected; 50 public boolean finalized; 51 public String channel; 52 private MessageQueue queue; 53 54 ServerConnection(LlamaChat c) { 55 connected = false; 56 finalized = false; 57 client = c; 58 channel = "Lobby"; 59 queue = new MessageQueue(this); 60 61 try { 62 SSLSocketFactory sslFact = 64 (SSLSocketFactory)SSLSocketFactory.getDefault(); 65 socket = (SSLSocket)sslFact.createSocket(c.site, c.PORT); 66 String [] enabledCipher = socket.getSupportedCipherSuites (); 68 socket.setEnabledCipherSuites (enabledCipher); 70 71 out = new ObjectOutputStream (socket.getOutputStream()); 73 in = new ObjectInputStream (socket.getInputStream()); 74 connected = true; 75 c.setConnected(true); 76 new Thread (this).start(); 77 } catch (IOException e) { 78 c.error("Server not available"); 79 c.setConnected(false); 80 connected = false; 81 } 82 } 83 84 88 private SocketData readObject() { 89 try { 90 return (SocketData) in.readObject(); 91 } catch (Throwable t) { 92 return null; 93 } 94 } 95 96 100 public void writeObject(Object obj) { 101 queue.enqueue(obj); 102 } 103 104 108 public void _writeObject(Object obj) { 109 if (connected) { 110 try { 111 out.writeObject(obj); 112 out.flush(); 113 } catch (IOException e) { 114 close(); 115 } 116 } 117 } 118 119 122 public void close() { 123 try { 124 connected = false; 125 client.setConnected(false); 126 if (connected) socket.close(); 127 } catch (IOException e) { } 128 client.close(); 129 } 130 131 133 138 public void serverCap(char type, Object obj) { 139 try { 140 switch (type) { 141 case SD_ServerCap.T_CREATE: 142 char tmp = ((Character ) obj).charValue(); 143 switch (tmp) { 144 case 'y': 145 client.butCreate.setEnabled(true); 146 client.chanAdmin = false; 147 break; 148 case 'a': 149 client.chanAdmin = true; 150 break; 151 default: 152 client.chanAdmin = false; 153 break; 154 } 155 break; 156 default: 157 break; 158 } 159 } catch (ClassCastException e) { } 160 } 161 162 166 public void userAdd(String username) { 167 if (username == null) { 168 client.showUserStatus = true; 169 } else { 170 client.userAdd(username); 171 } 172 } 173 178 public void adminAdd(String username) { 179 if (username.equals(client.username)) { 180 client.setAdmin(); 181 } if (!client.admins.contains(username)) { 182 client.admins.add(username); 183 client.serverMessage(username + " is now an admin"); 184 client.updateList(); 185 } 186 } 187 191 public void userDel(String username) { 192 client.userDel(username); 193 } 194 200 public void rename(String on, String nn) { 201 if (on.equals(client.username)) { 202 client.username = nn; 203 } 204 client.rename(on, nn); 205 } 206 210 public void kick(String un) { 211 client.username = null; 212 } 213 214 224 public void channel(boolean nc, String n, String p) { 225 if (nc) { 226 client.newChannel(n, (p == null ? false : true)); 227 } else { 228 if (n == null) { 229 client.cboChannels.setSelectedItem(channel); 230 client.showUserStatus = true; 231 } else { 232 client.users.clear(); 233 client.afks.clear(); 234 client.ignores.clear(); 235 client.admins.clear(); 236 if (client.admin) { 237 client.admins.add(client.username); 238 } 239 client.updateList(); 240 client.serverMessage("You have joined " + n); 241 client.userAdd(client.username); 242 client.cboChannels.setSelectedItem(n); 243 channel = n; 244 } 245 } 246 } 247 252 public void chat(String username, String message) { 253 client.recieveChat(username, message); 254 } 255 260 public void private_msg(String username, String message) { 261 client.recievePrivate(username, message); 262 } 263 268 public void whisper(String username, String message) { 269 client.recieveWhisper(username, message); 270 } 271 275 public void chatLog(boolean start) { 276 if (start) { 277 client.serverMessage("now logging in " + channel); 278 } else { 279 client.serverMessage("no longer logging in " + channel); 280 } 281 } 282 286 public void error(String s) { 287 client.error(s); 288 } 289 290 292 297 public void run() { 298 writeObject(new SD_UserAdd(client.username)); 299 SocketData sd; 300 while (connected && (sd = readObject()) != null) { 301 sd.performAction(this); 302 } 303 close(); 304 } 305 306 }
| Popular Tags
|