Changeset 306


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

Location:
trunk/src/org/expeditee
Files:
4 added
21 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/actions/Actions.java

    r305 r306  
    876876                return _IWs.get(widgetName.toLowerCase());
    877877        }
     878
     879        static List<String> getActions() {
     880                List<String> actionNames = new LinkedList<String>();
     881                for (Method m : _Actions.values()) {
     882                        StringBuilder sb = new StringBuilder();
     883                        sb.append(m.getName());
     884                        for (Class c : m.getParameterTypes()) {
     885                                sb.append(" ").append(c.getSimpleName());
     886                        }
     887                        actionNames.add(sb.toString());
     888                }
     889
     890                return actionNames;
     891        }
     892
     893        static List<String> getAgents() {
     894                List<String> agentNames = new LinkedList<String>();
     895
     896                for (String s : _JAGs.values()) {
     897                        agentNames.add(s.substring(s.lastIndexOf('.') + 1));
     898                }
     899
     900                return agentNames;
     901        }
    878902}
  • trunk/src/org/expeditee/actions/Mail.java

    r305 r306  
    11package org.expeditee.actions;
    22
     3import java.awt.Color;
    34import java.util.Collection;
    45
     
    1112import org.expeditee.gui.FrameKeyboardActions;
    1213import org.expeditee.gui.FrameMouseActions;
     14import org.expeditee.gui.MessageBay;
    1315import org.expeditee.items.Item;
    1416import org.expeditee.items.Text;
     17import org.expeditee.network.FrameShare;
    1518
    16 public class MailActions {
     19public class Mail {
    1720        /**
    1821         * Attempts to connect to mail servers
     
    5659        public static Collection<Text> getUnreadMail(Item clicked, int number) {
    5760                if (clicked instanceof Text) {
    58                         AttributeValuePair avp = new AttributeValuePair(clicked
    59                                         .getText());
    60                         if (avp.hasPair() && avp.getValue().contains(MailSession.UNREAD_MESSAGE)) {
     61                        AttributeValuePair avp = new AttributeValuePair(clicked.getText());
     62                        if (avp.hasPair()
     63                                        && avp.getValue().contains(MailSession.UNREAD_MESSAGE)) {
    6164                                avp.setValue("0" + MailSession.UNREAD_MESSAGE + "s");
    6265                                clicked.setText(avp.toString());
     
    171174        }
    172175
     176        public static void sendMessage(String peerName, String message) {
     177                if (FrameShare.getInstance().sendMessage(message, peerName)) {
     178                        MessageBay.displayMessage("Sent message to " + peerName,
     179                                        Color.green.darker());
     180                } else {
     181                        MessageBay.errorMessage("Could not find " + peerName);
     182                }
     183        }
    173184}
  • trunk/src/org/expeditee/actions/Navigation.java

    r305 r306  
    1616 *
    1717 */
    18 public class NavigationActions {
     18public class Navigation {
    1919
    2020        public static void setLastNavigationItem(Item i) {
  • trunk/src/org/expeditee/actions/Simple.java

    r298 r306  
    12871287                        String frameName = context.getPrimitives().getStringValue(
    12881288                                        frameNameVar);
    1289                         NavigationActions.Goto(frameName);
     1289                        Navigation.Goto(frameName);
    12901290                } else if (tokens[0].startsWith("get")) {
    12911291                        if (tokens[0].startsWith("getframe")) {
  • trunk/src/org/expeditee/agents/mail/MailSession.java

    r305 r306  
    204204                                                for (;;) {
    205205                                                        try {
    206                                                                 Thread.sleep(1000);
     206                                                                Thread.sleep(2000);
    207207                                                                /*
    208208                                                                 * sleep for freq milliseconds. This is to force
  • trunk/src/org/expeditee/gui/DisplayIO.java

    r301 r306  
    6969         * The title to display in the Title bar.
    7070         */
    71         public static final String TITLE = "Exp12Sep2008A";
     71        public static final String TITLE = "Exp15Sep2008A";
    7272
    7373        private DisplayIO() {
  • trunk/src/org/expeditee/gui/FrameIO.java

    r305 r306  
    173173        public static BufferedReader LoadPublicFrame(String frameName) {
    174174                String fullPath = FrameIO.getFrameFullPathName(PUBLIC_PATH, frameName);
    175                
     175
    176176                File frameFile = new File(fullPath);
    177177                if (frameFile.exists() && frameFile.canRead()) {
     
    783783                // Save frame that is not local through the Networking classes
    784784                // TODO
    785                 if (!toSave.isLocal())
    786                         return "";
     785                if (!toSave.isLocal()) {
     786                        return FrameShare.getInstance().saveFrame(toSave);
     787                }
    787788
    788789                /**
     
    864865                        }
    865866                        // Update general stuff about frame
    866                         toSave.setLastModifyDate(Logger.EasyDateFormat("ddMMMyyyy:HHmm"));
    867                         toSave.setLastModifyUser(UserSettings.Username);
    868                         toSave.setVersion(toSave.getVersion() + 1);
    869                         Time darkTime = new Time(SessionStats.getFrameDarkTime().getTime()
    870                                         + toSave.getDarkTime().getTime());
    871                         Time activeTime = new Time(SessionStats.getFrameActiveTime()
    872                                         .getTime()
    873                                         + toSave.getActiveTime().getTime());
    874                         toSave.setDarkTime(darkTime);
    875                         toSave.setActiveTime(activeTime);
     867                        setSavedProperties(toSave);
    876868
    877869                        // int oldMode = FrameGraphics.getMode();
     
    13481340        }
    13491341
     1342        public static void SavePublicFrame(String peerName, String frameName,
     1343                        int version, BufferedReader packetContents) {
     1344                // TODO handle versioning - add version to the header
     1345                // Remote user uploads version based on an old version
     1346
     1347                // Remove it from the cache so that next time it is loaded we get the up
     1348                // todate version
     1349                _Cache.remove(frameName.toLowerCase());
     1350
     1351                // Save to file
     1352                String filename = PUBLIC_PATH + Conversion.getFramesetName(frameName)
     1353                                + File.separator + Conversion.getFrameNumber(frameName)
     1354                                + ExpReader.EXTENTION;
     1355
     1356                File file = new File(filename);
     1357                // Ensure the file exists
     1358                if (file.exists()) {
     1359                        // Check the versions
     1360                        int savedVersion = ExpReader.getVersion(filename);
     1361
     1362                        if (savedVersion > version) {
     1363                                // remove this frame from the cache if it is there
     1364                                // This will make sure links to the original are set correctly
     1365                                // _Cache.remove(frameName.toLowerCase());
     1366
     1367                                int nextNum = 0;
     1368                                try {
     1369                                        nextNum = ReadINF(PUBLIC_PATH, Conversion
     1370                                                        .getFramesetName(frameName)) + 1;
     1371                                } catch (IOException e) {
     1372                                        e.printStackTrace();
     1373                                }
     1374
     1375                                String newName = Conversion.getFramesetName(frameName)
     1376                                                + nextNum;
     1377                                filename = PUBLIC_PATH + Conversion.getFramesetName(frameName)
     1378                                                + File.separator + nextNum + ExpReader.EXTENTION;
     1379
     1380                                // Show the messages alerting the user
     1381                                Text originalMessage = new Text(-1);
     1382                                originalMessage.setColor(MessageBay.ERROR_COLOR);
     1383                                originalMessage.setText(frameName + " was edited by "
     1384                                                + peerName);
     1385                                originalMessage.setLink(frameName);
     1386                                Text yourMessage = new Text(-1);
     1387                                yourMessage.setColor(MessageBay.ERROR_COLOR);
     1388                                yourMessage.setText("Their version was renamed " + newName);
     1389                                yourMessage.setLink(newName);
     1390                                MessageBay.displayMessage(originalMessage);
     1391                                MessageBay.displayMessage(yourMessage);
     1392
     1393                                Frame editedFrame = FrameIO.LoadFrame(frameName);
     1394
     1395                                FrameShare.getInstance().sendMessage(
     1396                                                frameName + " was recently edited by "
     1397                                                                + editedFrame.getLastModifyUser(), peerName);
     1398                                FrameShare.getInstance().sendMessage(
     1399                                                "Your version was renamed " + newName, peerName);
     1400                        }
     1401
     1402                        // Save the new version
     1403                        try {
     1404                                FileWriter fw = new FileWriter(file);
     1405                                String nextLine = null;
     1406                                while ((nextLine = packetContents.readLine()) != null) {
     1407                                        fw.write(nextLine + '\n');
     1408                                }
     1409                                fw.flush();
     1410                                fw.close();
     1411                                MessageBay.displayMessage("Saved remote frame: " + frameName);
     1412                        } catch (IOException e) {
     1413                                e.printStackTrace();
     1414                        }
     1415                } else {
     1416                        MessageBay
     1417                                        .errorMessage("Recieved request for unknown public frame: "
     1418                                                        + frameName);
     1419                }
     1420        }
     1421
     1422        public static void setSavedProperties(Frame toSave) {
     1423                toSave.setLastModifyDate(Logger.EasyDateFormat("ddMMMyyyy:HHmm"));
     1424                toSave.setLastModifyUser(UserSettings.Username);
     1425                toSave.setVersion(toSave.getVersion() + 1);
     1426                Time darkTime = new Time(SessionStats.getFrameDarkTime().getTime()
     1427                                + toSave.getDarkTime().getTime());
     1428                Time activeTime = new Time(SessionStats.getFrameActiveTime().getTime()
     1429                                + toSave.getActiveTime().getTime());
     1430                toSave.setDarkTime(darkTime);
     1431                toSave.setActiveTime(activeTime);
     1432        }
     1433
    13501434}
  • trunk/src/org/expeditee/gui/FrameKeyboardActions.java

    r297 r306  
    2121import org.expeditee.actions.Actions;
    2222import org.expeditee.actions.Misc;
    23 import org.expeditee.actions.NavigationActions;
     23import org.expeditee.actions.Navigation;
    2424import org.expeditee.actions.Simple;
    2525import org.expeditee.io.Logger;
     
    8989
    9090        public static void processChar(char ch, boolean isShiftDown) {
    91                 NavigationActions.ResetLastAddToBack();
     91                Navigation.ResetLastAddToBack();
    9292                Item on = FrameUtils.getCurrentItem();
    9393
     
    307307                case Text.RIGHT:
    308308                case Text.PAGE_UP:
    309                         NavigationActions.NextFrame(false);
     309                        Navigation.NextFrame(false);
    310310                        break;
    311311                case Text.LEFT:
    312312                case Text.PAGE_DOWN:
    313                         NavigationActions.PreviousFrame(false);
     313                        Navigation.PreviousFrame(false);
    314314                        break;
    315315                case Text.HOME:
    316316                case Text.LINE_HOME:
    317                         NavigationActions.ZeroFrame();
     317                        Navigation.ZeroFrame();
    318318                        break;
    319319                case Text.END:
    320320                case Text.LINE_END:
    321                         NavigationActions.LastFrame();
     321                        Navigation.LastFrame();
    322322                        break;
    323323                }
     
    709709                        }
    710710                        if (current.getLink() != null) {
    711                                 NavigationActions.Goto(current.getAbsoluteLink());
     711                                Navigation.Goto(current.getAbsoluteLink());
    712712                                return;
    713713                        }
  • trunk/src/org/expeditee/gui/FrameMouseActions.java

    r298 r306  
    2525
    2626import org.expeditee.actions.Actions;
    27 import org.expeditee.actions.NavigationActions;
     27import org.expeditee.actions.Navigation;
    2828import org.expeditee.items.Circle;
    2929import org.expeditee.items.Constraint;
     
    242242                }
    243243
    244                 NavigationActions.ResetLastAddToBack();
     244                Navigation.ResetLastAddToBack();
    245245                // System.out.println(modifiersEx);
    246246                if (_mouseDown == 0)
     
    713713                                        FrameIO.SaveFrame(DisplayIO.getCurrentFrame());
    714714
    715                                 NavigationActions.setLastNavigationItem(clickedOn);
     715                                Navigation.setLastNavigationItem(clickedOn);
    716716                                load(clickedOn.getAbsoluteLink());
    717717                                // DisplayIO.UpdateTitle();
     
    28142814
    28152815        public void mouseWheelMoved(MouseWheelEvent arg0) {
    2816                 NavigationActions.ResetLastAddToBack();
     2816                Navigation.ResetLastAddToBack();
    28172817
    28182818                int clicks = arg0.getClickCount();
  • trunk/src/org/expeditee/io/AbstractHTMLWriter.java

    r290 r306  
    55import java.io.File;
    66import java.io.IOException;
     7import java.io.Writer;
    78import java.util.List;
    89
     
    1920
    2021        @Override
    21         protected void initialise(Frame start) throws IOException {
     22        protected void initialise(Frame start, Writer writer) throws IOException {
    2223                _format = ".html";
    23                 super.initialise(start);
     24                super.initialise(start, writer);
    2425
    2526                _writer.write("<html>" + ItemWriter.NEW_LINE);
  • trunk/src/org/expeditee/io/DefaultFrameWriter.java

    r286 r306  
    44import java.io.FileWriter;
    55import java.io.IOException;
     6import java.io.Writer;
    67import java.lang.reflect.Method;
    78import java.util.Collection;
     
    123124
    124125        public String writeFrame(Frame toWrite) throws IOException {
     126                return writeFrame(toWrite, null);
     127        }
     128       
     129        public String writeFrame(Frame toWrite, Writer writer) throws IOException {
    125130                try {
    126                         initialise(toWrite);
     131                        initialise(toWrite, writer);
    127132
    128133                        outputFrame(toWrite);
     
    162167        protected void writeEndFrame(Frame ending) throws IOException {
    163168        }
    164 
    165         protected void initialise(Frame start) throws IOException {
     169       
     170        protected final void initialise(Frame start) throws IOException {
     171                initialise(start, null);
     172        }
     173       
     174        protected void initialise(Frame start, Writer writer) throws IOException {
    166175                if (_filename == null)
    167176                        _filename = FrameIO.EXPORTS_DIR
    168177                                        + getFileName(start) + _format;
    169178
    170                 if (_filename.equalsIgnoreCase(WriteTree.CLIPBOARD)) {
     179                if(writer != null){
     180                        _writer = new ProxyWriter(writer);
     181                        _output = writer.toString();
     182                }else if (_filename.equalsIgnoreCase(WriteTree.CLIPBOARD)) {
    171183                        _writer = new ProxyWriter(true);
    172184                        _output = WriteTree.CLIPBOARD;
  • trunk/src/org/expeditee/io/ExpWriter.java

    r298 r306  
    44import java.io.FileWriter;
    55import java.io.IOException;
     6import java.io.Writer;
    67import java.lang.reflect.Method;
    78import java.util.Iterator;
     
    3536        }
    3637
    37         public void initialise(Frame start) throws IOException {
     38        @Override
     39        public void initialise(Frame start, Writer writer) throws IOException {
    3840                String name = start.getFramesetName().toLowerCase();
    3941
     
    4345
    4446                _stringWriter = new StringBuilder();
    45                 if (_filename.equalsIgnoreCase(DefaultAgent.CLIPBOARD)) {
     47               
     48               
     49                if (writer != null){
     50                        _writer = new ProxyWriter(writer);
     51                        _output = writer.toString();
     52                }else if (_filename.equalsIgnoreCase(DefaultAgent.CLIPBOARD)) {
    4653                        _writer = new ProxyWriter(true);
    4754                        _filename = DefaultAgent.CLIPBOARD;
    4855                } else
    4956                        _writer = new ProxyWriter(new FileWriter(_filename));
     57               
     58               
    5059               
    5160                try {
  • trunk/src/org/expeditee/io/FrameWriter.java

    r4 r306  
    22
    33import java.io.IOException;
     4import java.io.Writer;
    45
    56import org.expeditee.gui.Frame;
     
    1112        public String writeFrame(Frame toWrite) throws IOException;
    1213
     14        /**
     15         * Methods for writing out frames to file as well as with other writers such
     16         * as StringWriter.
     17         *
     18         * @param toWrite
     19         * @param writer
     20         * @return
     21         * @throws IOException
     22         */
     23        public String writeFrame(Frame toWrite, Writer writer) throws IOException;
     24
    1325        public void stop();
    1426
  • trunk/src/org/expeditee/io/HTMLWriter.java

    r108 r306  
    22
    33import java.io.IOException;
     4import java.io.Writer;
    45import java.util.List;
    56
     
    1617
    1718        @Override
    18         protected void initialise(Frame start) throws IOException {
     19        protected void initialise(Frame start, Writer writer) throws IOException {
    1920                _format = ".html";
    20                 super.initialise(start);
     21                super.initialise(start, writer);
    2122        }
    2223
  • trunk/src/org/expeditee/io/JAVAWriter.java

    r80 r306  
    22
    33import java.io.IOException;
     4import java.io.Writer;
    45import java.util.List;
    56
     
    1617
    1718        @Override
    18         protected void initialise(Frame start) throws IOException {
     19        protected void initialise(Frame start, Writer writer) throws IOException {
    1920                _format = ".java";
    20                 super.initialise(start);
     21                super.initialise(start, writer);
    2122
    2223                // write the package and import statements here!!
  • trunk/src/org/expeditee/io/KMSWriter.java

    r298 r306  
    44import java.io.FileWriter;
    55import java.io.IOException;
     6import java.io.Writer;
    67import java.lang.reflect.InvocationTargetException;
    78import java.lang.reflect.Method;
     
    3839        }
    3940
    40         public void initialise(Frame start) throws IOException {
     41        public void initialise(Frame start, Writer writer) throws IOException {
    4142                String name = start.getFramesetName().toLowerCase();
    4243
  • trunk/src/org/expeditee/io/PDF2Writer.java

    r282 r306  
    55import java.io.FileOutputStream;
    66import java.io.IOException;
     7import java.io.Writer;
    78import java.util.Collection;
    89import java.util.List;
     
    4041
    4142        @Override
    42         protected void initialise(Frame start) throws IOException {
     43        protected void initialise(Frame start, Writer writer) throws IOException {
    4344                _format = ".pdf";
    44                 super.initialise(start);
     45                super.initialise(start, writer);
    4546                try {
    4647                        _pdfWriter = PdfWriter.getInstance(_pdfDocument,
  • trunk/src/org/expeditee/io/PDFWriter.java

    r290 r306  
    44import java.io.FileOutputStream;
    55import java.io.IOException;
     6import java.io.Writer;
    67import java.util.List;
    78
     
    4243
    4344        @Override
    44         protected void initialise(Frame start) throws IOException {
     45        protected void initialise(Frame start, Writer writer) throws IOException {
    4546                _format = ".pdf";
    46                 super.initialise(start);
     47                super.initialise(start, writer);
    4748                try {
    4849                        PdfWriter
  • trunk/src/org/expeditee/io/PdfFramesetWriter.java

    r286 r306  
    11package org.expeditee.io;
    22
    3 import java.awt.Color;
    43import java.awt.Dimension;
    54import java.awt.Graphics2D;
     
    76import java.io.FileOutputStream;
    87import java.io.IOException;
     8import java.io.Writer;
    99import java.util.Collection;
    1010import java.util.List;
     
    6363
    6464        @Override
    65         protected void initialise(Frame start) throws IOException {
     65        protected void initialise(Frame start, Writer writer) throws IOException {
    6666                _format = ".pdf";
    67                 super.initialise(start);
     67                super.initialise(start, writer);
    6868
    6969                try {
  • trunk/src/org/expeditee/io/TEXWriter.java

    r80 r306  
    22
    33import java.io.IOException;
     4import java.io.Writer;
    45import java.util.List;
    56
     
    1516
    1617        @Override
    17         protected void initialise(Frame start) throws IOException {
     18        protected void initialise(Frame start, Writer writer) throws IOException {
    1819                _format = ".tex";
    19                 super.initialise(start);
     20                super.initialise(start, writer);
    2021        }
    2122
  • trunk/src/org/expeditee/io/TXTWriter.java

    r80 r306  
    22
    33import java.io.IOException;
     4import java.io.Writer;
    45import java.util.List;
    56
     
    1617
    1718        @Override
    18         protected void initialise(Frame start) throws IOException {
     19        protected void initialise(Frame start, Writer writer) throws IOException {
    1920                _format = ".txt";
    20                 super.initialise(start);
     21                super.initialise(start, writer);
    2122        }
    2223
  • trunk/src/org/expeditee/network/FrameServer.java

    r305 r306  
    1010import org.expeditee.gui.MessageBay;
    1111
    12 public class FrameServer extends Thread {
    13 
    14         private static final int MAX_PACKET_LENGTH = 2000;
    15 
    16         private boolean _stop = false;
    17 
    18         protected DatagramSocket socket = null;
     12public class FrameServer extends DefaultServer {
    1913
    2014        public FrameServer() throws IOException {
     
    2721        }
    2822
    29         public void close() {
    30                 _stop = true;
    31         }
    32 
    33         public void run() {
    34                 MessageBay.displayMessage("Serving frames on port "
    35                                 + socket.getLocalPort());
    36 
    37                 while (!_stop) {
    38                         try {
    39                                 byte[] buf = new byte[MAX_PACKET_LENGTH];
    40 
    41                                 // receive request
    42                                 DatagramPacket packet = new DatagramPacket(buf, buf.length);
    43                                 socket.receive(packet);
    44 
    45                                 String frameName = new String(packet.getData(), 0, packet
    46                                                 .getLength());
    47                                 MessageBay.displayMessage("Recieved request for " + frameName);
    48 
    49                                 // figure out response
    50                                 String dString = getFrame(frameName);
    51 
    52                                 if (dString != null && dString.length() > 0) {
    53                                         buf = dString.getBytes();
    54 
    55                                         // send the response to the client at "address" and "port"
    56                                         InetAddress address = packet.getAddress();
    57                                         int port = packet.getPort();
    58                                         packet = new DatagramPacket(buf, buf.length, address, port);
    59                                         socket.send(packet);
    60                                 }
    61                         } catch (IOException e) {
    62                                 e.printStackTrace();
    63                         }
    64                 }
    65                 socket.close();
    66         }
    67 
    6823        protected String getFrame(String frameName) {
    6924                StringBuffer sb = new StringBuffer();
     
    7429                String s = null;
    7530                try {
    76                         while ((s = br.readLine()) != null && sb.length() < MAX_PACKET_LENGTH) {
     31                        while ((s = br.readLine()) != null) {
     32                                //Check if there is space for the next line in the packet
     33                                if(sb.length() + s.length() > MAX_PACKET_LENGTH){
     34                                        MessageBay.errorMessage(frameName + " is too large to be sent in a single packet");
     35                                        break;
     36                                }
    7737                                sb.append(s).append('\n');
    7838                        }
     
    8343                return sb.toString();
    8444        }
     45
     46        @Override
     47        protected void listenForMessages() throws IOException {
     48                byte[] buf = new byte[FRAMENAME_PACKET_LENGTH];
     49
     50                // receive request
     51                DatagramPacket packet = new DatagramPacket(buf, buf.length);
     52                socket.receive(packet);
     53
     54                String frameName = new String(packet.getData(), 0, packet
     55                                .getLength());
     56                MessageBay.displayMessage("Recieved request for " + frameName);
     57
     58                // figure out response
     59                String dString = getFrame(frameName);
     60
     61                if (dString != null && dString.length() > 0) {
     62                        buf = dString.getBytes();
     63
     64                        // send the response to the client at "address" and "port"
     65                        InetAddress address = packet.getAddress();
     66                        int port = packet.getPort();
     67                        packet = new DatagramPacket(buf, buf.length, address, port);
     68                        socket.send(packet);
     69                }
     70        }
    8571}
  • 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.