Ignore:
Timestamp:
09/16/08 09:55:34 (16 years ago)
Author:
ra33
Message:

Added some HELP actions
More mail stuff... and networking stuff
Can now save frames and send messages to peers
Also version control prevent versions from being lost

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/network/FrameShare.java

    r305 r306  
    44import java.io.IOException;
    55import java.io.StringReader;
     6import java.io.StringWriter;
    67import java.net.DatagramPacket;
    78import java.net.DatagramSocket;
     9import java.net.InetAddress;
    810import java.net.UnknownHostException;
     11import java.util.Collection;
    912import java.util.HashMap;
     13import java.util.LinkedList;
    1014import java.util.Map;
    1115
    1216import org.expeditee.gui.AttributeValuePair;
    1317import org.expeditee.gui.Frame;
     18import org.expeditee.gui.FrameIO;
    1419import org.expeditee.gui.MessageBay;
    1520import org.expeditee.io.ExpReader;
     21import org.expeditee.io.ExpWriter;
    1622import org.expeditee.io.FrameReader;
     23import org.expeditee.io.FrameWriter;
    1724import org.expeditee.items.Text;
    1825
    1926public class FrameShare {
    2027
    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;
    2433
    2534        private Map<String, Peer> _peers;
     35
     36        private int _port = -1;
    2637
    2738        public static void init(Frame settingsFrame) {
     
    4859                                try {
    4960                                        if (!avp.hasPair()) {
    50                                                 _server = new FrameServer();
     61                                                _servers.add(new FrameServer());
     62                                                _servers.add(new FrameSaver());
     63                                                _servers.add(new MessageReciever());
    5164                                        } 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));
    5470                                        }
    5571                                } catch (Exception e) {
    5672                                        e.printStackTrace();
    57                                         MessageBay.errorMessage("Could not start frame server ["
     73                                        MessageBay.errorMessage("Could not start servers ["
    5874                                                        + avp.toString() + "]");
    5975                                }
     
    7389
    7490                try {
    75                         if (_server != null) {
    76                                 _server.start();
    77                         }
     91                        for (DefaultServer server : _servers)
     92                                server.start();
    7893                } catch (Exception e) {
    7994                        MessageBay.errorMessage("Error in PeerToPeer setup");
     
    8297
    8398        public void finalise() {
    84                 _server.close();
     99                for (DefaultServer server : _servers)
     100                        server.close();
    85101        }
    86102
     
    97113        public Frame loadFrame(String frameName) {
    98114                byte[] nameBuf = frameName.getBytes();
    99                 byte[] buf = new byte[2056];
     115                byte[] buf = new byte[FrameServer.MAX_PACKET_LENGTH];
    100116
    101117                String result = null;
     
    104120                        // get a datagram socket
    105121                        DatagramSocket socket = new DatagramSocket();
    106                         socket.setSoTimeout(1000);
     122                        socket.setSoTimeout(SOCKET_TIMEOUT);
    107123
    108124                        for (Peer peer : _peers.values()) {
     
    129145
    130146                }
    131                
    132                 if(result == null)
     147
     148                if (result == null)
    133149                        return null;
    134                
     150
    135151                // Now read the frame from the file contents
    136152                FrameReader reader = new ExpReader(frameName);
     
    155171                return frame;
    156172        }
     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        }
    157258}
Note: See TracChangeset for help on using the changeset viewer.