Changeset 306 for trunk/src/org/expeditee/network/FrameShare.java
- Timestamp:
- 09/16/08 09:55:34 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/network/FrameShare.java
r305 r306 4 4 import java.io.IOException; 5 5 import java.io.StringReader; 6 import java.io.StringWriter; 6 7 import java.net.DatagramPacket; 7 8 import java.net.DatagramSocket; 9 import java.net.InetAddress; 8 10 import java.net.UnknownHostException; 11 import java.util.Collection; 9 12 import java.util.HashMap; 13 import java.util.LinkedList; 10 14 import java.util.Map; 11 15 12 16 import org.expeditee.gui.AttributeValuePair; 13 17 import org.expeditee.gui.Frame; 18 import org.expeditee.gui.FrameIO; 14 19 import org.expeditee.gui.MessageBay; 15 20 import org.expeditee.io.ExpReader; 21 import org.expeditee.io.ExpWriter; 16 22 import org.expeditee.io.FrameReader; 23 import org.expeditee.io.FrameWriter; 17 24 import org.expeditee.items.Text; 18 25 19 26 public class FrameShare { 20 27 21 private static FrameShare _theSession = null; 22 23 private static FrameServer _server = null; 28 private static final int SOCKET_TIMEOUT = 1000; 29 30 private static Collection<DefaultServer> _servers = new LinkedList<DefaultServer>(); 31 32 private static FrameShare _theSession; 24 33 25 34 private Map<String, Peer> _peers; 35 36 private int _port = -1; 26 37 27 38 public static void init(Frame settingsFrame) { … … 48 59 try { 49 60 if (!avp.hasPair()) { 50 _server = new FrameServer(); 61 _servers.add(new FrameServer()); 62 _servers.add(new FrameSaver()); 63 _servers.add(new MessageReciever()); 51 64 } else { 52 _server = new FrameServer("FrameServer", avp 53 .getIntegerValue()); 65 _port = avp.getIntegerValue(); 66 _servers.add(new FrameServer("FrameServer", _port)); 67 _servers.add(new FrameSaver("FrameSaver", _port + 1)); 68 _servers 69 .add(new MessageReciever("Messages", _port + 2)); 54 70 } 55 71 } catch (Exception e) { 56 72 e.printStackTrace(); 57 MessageBay.errorMessage("Could not start frame server["73 MessageBay.errorMessage("Could not start servers [" 58 74 + avp.toString() + "]"); 59 75 } … … 73 89 74 90 try { 75 if (_server != null) { 76 _server.start(); 77 } 91 for (DefaultServer server : _servers) 92 server.start(); 78 93 } catch (Exception e) { 79 94 MessageBay.errorMessage("Error in PeerToPeer setup"); … … 82 97 83 98 public void finalise() { 84 _server.close(); 99 for (DefaultServer server : _servers) 100 server.close(); 85 101 } 86 102 … … 97 113 public Frame loadFrame(String frameName) { 98 114 byte[] nameBuf = frameName.getBytes(); 99 byte[] buf = new byte[ 2056];115 byte[] buf = new byte[FrameServer.MAX_PACKET_LENGTH]; 100 116 101 117 String result = null; … … 104 120 // get a datagram socket 105 121 DatagramSocket socket = new DatagramSocket(); 106 socket.setSoTimeout( 1000);122 socket.setSoTimeout(SOCKET_TIMEOUT); 107 123 108 124 for (Peer peer : _peers.values()) { … … 129 145 130 146 } 131 132 if (result == null)147 148 if (result == null) 133 149 return null; 134 150 135 151 // Now read the frame from the file contents 136 152 FrameReader reader = new ExpReader(frameName); … … 155 171 return frame; 156 172 } 173 174 public boolean sendMessage(String message, String peerName) { 175 Peer peer = _peers.get(peerName.toLowerCase()); 176 177 if(peer == null){ 178 return false; 179 } 180 181 try { 182 // get a datagram socket 183 DatagramSocket socket = new DatagramSocket(_port - 1); 184 socket.setSoTimeout(SOCKET_TIMEOUT); 185 186 // message = peerName + " says " + message; 187 byte[] contentsBuf = message.getBytes(); 188 189 try { 190 // send save request 191 DatagramPacket packet = new DatagramPacket(contentsBuf, 192 contentsBuf.length, peer.getAddress(), 193 peer.getPort() + 2); 194 socket.send(packet); 195 } catch (Exception e) { 196 e.printStackTrace(); 197 } 198 socket.close(); 199 200 } catch (IOException e) { 201 e.printStackTrace(); 202 } 203 return true; 204 } 205 206 public String saveFrame(Frame toSave) { 207 208 FrameIO.setSavedProperties(toSave); 209 210 Peer peer = _peers.get(toSave.getPath().toLowerCase()); 211 String fileContents = ""; 212 // Now read the frame from the file contents 213 FrameWriter writer = new ExpWriter(); 214 try { 215 // String tempName = new Date().toString() + ".exp"; 216 // writer.setOutputLocation(tempName); 217 // Write out the file to a StringBuffer 218 StringWriter sw = new StringWriter(); 219 // First write out the name of the frame 220 sw.write(toSave.getName() + "\n"); 221 //Then the version 222 sw.write(toSave.getVersion() + "\n"); 223 // Write out the rest of the frame 224 writer.writeFrame(toSave, sw); 225 // Now send the packet 226 fileContents = sw.getBuffer().toString(); 227 byte[] contentsBuf = fileContents.getBytes(); 228 229 // get a datagram socket 230 DatagramSocket socket = new DatagramSocket(_port - 2); 231 socket.setSoTimeout(SOCKET_TIMEOUT); 232 233 try { 234 // send save request 235 DatagramPacket packet = new DatagramPacket(contentsBuf, 236 contentsBuf.length, peer.getAddress(), 237 peer.getPort() + 1); 238 socket.send(packet); 239 } catch (Exception e) { 240 e.printStackTrace(); 241 } 242 socket.close(); 243 244 } catch (IOException e) { 245 e.printStackTrace(); 246 } 247 toSave.setSaved(); 248 return fileContents; 249 } 250 251 public String getPeerName(int port, InetAddress address) { 252 for (Peer p : _peers.values()) { 253 if(p.getPort() == port && p.getAddress().equals(address)) 254 return p.getName(); 255 } 256 return null; 257 } 157 258 }
Note:
See TracChangeset
for help on using the changeset viewer.