Changeset 838 for trunk/src/org/expeditee/network
- Timestamp:
- 02/05/14 11:15:35 (10 years ago)
- Location:
- trunk/src/org/expeditee/network
- Files:
-
- 2 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/expeditee/network/DefaultServer.java
r649 r838 10 10 protected static final int FRAMENAME_PACKET_LENGTH = 1000; 11 11 12 pr ivateboolean _stop = false;12 protected boolean _stop = false; 13 13 protected DatagramSocket socket = null; 14 14 … … 19 19 public DefaultServer(Runnable target) { 20 20 super(target); 21 } 22 23 protected DefaultServer(String name) { 24 super(name); 21 25 } 22 26 -
trunk/src/org/expeditee/network/FrameShare.java
r751 r838 2 2 3 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileOutputStream; 4 6 import java.io.IOException; 7 import java.io.InputStream; 5 8 import java.io.StringReader; 6 9 import java.io.StringWriter; … … 8 11 import java.net.DatagramSocket; 9 12 import java.net.InetAddress; 13 import java.net.Socket; 10 14 import java.net.SocketException; 11 15 import java.net.UnknownHostException; … … 47 51 _servers.add(new InfServer(_port)); 48 52 _servers.add(new InfUpdate(_port)); 53 _servers.add(new ImageServer(_port)); 54 _servers.add(new ImageSaver(_port)); 49 55 50 56 } … … 203 209 204 210 return frame; 211 } 212 213 /** 214 * Downloads an image from the server (if it exists), 215 * Saves it locally in the default image folder, 216 * Then returns the filename 217 * 218 * @param imageName 219 * @param peerName 220 * @return true if the image was successfully downloaded and saved in the default images folder 221 */ 222 public boolean loadImage(String imageName, String peerName) { 223 boolean result = false; 224 try { 225 if (peerName == null) { 226 for (Peer peer : _peers.values()) { 227 try { 228 result = getImage(imageName, peer); 229 if(!result) { 230 continue; 231 } 232 peerName = peer.getName(); 233 break; 234 } catch (Exception e) { 235 e.printStackTrace(); 236 } 237 } 238 } else { 239 try { 240 Peer peer = _peers.get(peerName.toLowerCase()); 241 if (peer != null) { 242 result = getImage(imageName, peer); 243 } 244 } catch (Exception e) { 245 e.printStackTrace(); 246 } 247 } 248 } catch(Exception e) { 249 e.printStackTrace(); 250 } 251 return result; 252 } 253 254 /** 255 * Sends an image to the server, 256 * So that other users can view the image on the server frames 257 * 258 * @param imageName 259 * @param peerName 260 */ 261 public void sendImage(String imageName, String peerName) { 262 263 } 264 265 private boolean getImage(String imageName, Peer peer) throws IOException { 266 try(Socket socket = new Socket(peer.getAddress(), peer.getPort() + ImageServer.OFFSET)) { 267 socket.setSoTimeout(NetworkSettings.FrameShareTimeout.get() * 2); 268 byte[] fileName = imageName.getBytes(); 269 int fileNameLen = fileName.length; 270 byte[] data = new byte[2 + fileNameLen]; 271 data[0] = (byte) ((fileNameLen >> 8) & 0xFF); 272 data[1] = (byte) ((fileNameLen) & 0xFF); 273 System.arraycopy(fileName, 0, data, 2, fileNameLen); 274 socket.getOutputStream().write(data); 275 socket.getOutputStream().flush(); 276 socket.shutdownOutput(); 277 InputStream is = socket.getInputStream(); 278 // file length is the first 4 bytes 279 int fileLen = (is.read() << 24) | (is.read() << 16) | (is.read() << 8) | is.read(); 280 // if the above reads failed, fileLen will be -1 281 if(fileLen <= 0) { 282 return false; 283 } 284 System.out.println("Receiving " + new String(fileName, ImageServer.CHARSET) + " (" + fileLen + " bytes)"); 285 File f = new File(FrameIO.IMAGES_PATH + imageName); 286 f.getParentFile().mkdirs(); 287 FileOutputStream out = new FileOutputStream(f); 288 // file is the remaining bytes of the stream 289 byte[] buf = null; 290 if(fileLen > 1024) { 291 buf = new byte[1024]; 292 while(fileLen > 1024) { 293 is.read(buf); 294 out.write(buf); 295 fileLen -= 1024; 296 } 297 } 298 buf = new byte[fileLen]; 299 is.read(buf); 300 out.write(buf); 301 out.flush(); 302 out.close(); 303 socket.close(); 304 return true; 305 } catch(Exception e) { 306 e.printStackTrace(); 307 return false; 308 } 205 309 } 206 310
Note:
See TracChangeset
for help on using the changeset viewer.