From: <ha...@us...> - 2011-09-28 21:55:54
|
Revision: 16175 http://jmol.svn.sourceforge.net/jmol/?rev=16175&view=rev Author: hansonr Date: 2011-09-28 21:55:43 +0000 (Wed, 28 Sep 2011) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/constant/EnumQuantumShell.java trunk/Jmol/src/org/jmol/quantum/MOCalculation.java trunk/Jmol/src/org/jmol/script/ScriptCompiler.java trunk/Jmol/src/org/jmol/script/ScriptEvaluator.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties trunk/Jmol/src/org/jmol/viewer/PropertyManager.java trunk/Jmol/src/org/jmol/viewer/StatusManager.java trunk/Jmol/src/org/jmol/viewer/Viewer.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JsonNioService.java trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java trunk/Jmol/src/org/openscience/molecularplayground/MPJmolApp.java Modified: trunk/Jmol/src/org/jmol/constant/EnumQuantumShell.java =================================================================== --- trunk/Jmol/src/org/jmol/constant/EnumQuantumShell.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/jmol/constant/EnumQuantumShell.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -31,26 +31,28 @@ */ public enum EnumQuantumShell { - S("S",0,0), - P("P",1,1), - SP("SP",2,2), - D_SPHERICAL("5D",3,3), - D_CARTESIAN("D",4,3), - F_SPHERICAL("7F",5,5), - F_CARTESIAN("F",6,5), - G_SPHERICAL("9G",7,7), - G_CARTESIAN("G",8,7), - H_SPHERICAL("10H",9,9), - H_CARTESIAN("H",10,9); + S("S","S",0,0), + P("P","X",1,1), + SP("SP","SP",2,2), + D_SPHERICAL("5D","5D",3,3), + D_CARTESIAN("D","XX",4,3), + F_SPHERICAL("7F","7F",5,5), + F_CARTESIAN("F","XXX",6,5), + G_SPHERICAL("9G","9G",7,7), + G_CARTESIAN("G","XXXX",8,7), + H_SPHERICAL("10H","10H",9,9), + H_CARTESIAN("H","XXXXX",10,9); final public static String SUPPORTED_BASIS_FUNCTIONS = "SPLDF"; public final String tag; + private final String tag2; public final int id; private final int idSpherical; - private EnumQuantumShell(String tag, int id, int idSpherical) { + private EnumQuantumShell(String tag, String tag2, int id, int idSpherical) { this.tag = tag; + this.tag2 = tag2; this.id = id; this.idSpherical = idSpherical; } @@ -76,7 +78,7 @@ private static EnumQuantumShell getQuantumShell(String tag) { for (EnumQuantumShell item : values()) - if (item.tag.equals(tag)) + if (item.tag.equals(tag) || item.tag2.equals(tag)) return item; return null; } Modified: trunk/Jmol/src/org/jmol/quantum/MOCalculation.java =================================================================== --- trunk/Jmol/src/org/jmol/quantum/MOCalculation.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/jmol/quantum/MOCalculation.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -149,7 +149,7 @@ this.coefs = coefs; this.isElectronDensity = (partialCharges != null); this.doNormalize = doNormalize; - Logger.info("Normalizing AOs: " + doNormalize + " slaters = " + (slaters != null)); + Logger.info("Normalizing AOs: " + doNormalize + " slaters:" + (slaters != null)); countsXYZ = volumeData.getVoxelCounts(); initialize(countsXYZ[0], countsXYZ[1], countsXYZ[2], points); voxelData = volumeData.getVoxelData(); @@ -379,7 +379,7 @@ for (int i = 0; i < map.length; i++) isOK |= ((coeffs[i] = moCoefficients[map[i] + moCoeff++]) != 0); isOK &= (coeffs[0] != Integer.MIN_VALUE); - if (isOK && doDebug && !isProcess) + if (isOK && doDebug && isProcess) dumpInfo(mapType); return isOK; } Modified: trunk/Jmol/src/org/jmol/script/ScriptCompiler.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptCompiler.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/jmol/script/ScriptCompiler.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -965,7 +965,11 @@ } if (tokCommand == Token.sync && nTokens == 1 && charToken()) { String ident = script.substring(ichToken, ichToken + cchToken); - addTokenToPrefix(new Token(Token.identifier, ident)); + int iident = Parser.parseInt(ident); + if (iident == Integer.MIN_VALUE || Math.abs(iident) < 1000) + addTokenToPrefix(new Token(Token.identifier, ident)); + else + addTokenToPrefix(new Token(Token.integer, iident)); return CONTINUE; } switch (tokCommand) { Modified: trunk/Jmol/src/org/jmol/script/ScriptEvaluator.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptEvaluator.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/jmol/script/ScriptEvaluator.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -10256,6 +10256,12 @@ applet = "."; break; } + if (tokAt(1) == Token.integer) { + // start/stop server on port <nnnn> + if (!isSyntaxCheck) + viewer.syncScript(null, null, intParameter(1)); + return; + } text = applet; applet = "*"; break; @@ -10266,6 +10272,7 @@ text = (tokAt(2) == Token.stereo ? Viewer.SYNC_GRAPHICS_MESSAGE : parameterAsString(2)); if (tokAt(1) == Token.integer) { + // send to server on port <nnnn> viewer.syncScript(text, null, intParameter(1)); return; } Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2011-09-28 21:55:43 UTC (rev 16175) @@ -3,6 +3,7 @@ version=12.2.RC8_dev +# bug fix: getproperty minimizationInfo returns JSON instead of readable string # bug fix: JaguarReader not reading D6 MOs properly # new feature: Jmol Application flags -k and -P # -- -k kiosk mode: like applet, but with a banner across the top Modified: trunk/Jmol/src/org/jmol/viewer/PropertyManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -339,7 +339,7 @@ } private final static String[] readableTypes = { - "", "stateinfo", "extractmodel", "filecontents", "fileheader", "image", "menu"}; + "", "stateinfo", "extractmodel", "filecontents", "fileheader", "image", "menu", "minimizationInfo"}; private static boolean isReadableAsString(String infoType) { for (int i = readableTypes.length; --i >= 0; ) Modified: trunk/Jmol/src/org/jmol/viewer/StatusManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/StatusManager.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/jmol/viewer/StatusManager.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -584,7 +584,7 @@ void syncSend(String script, String appletName, int port) { // no jmolscript option for syncSend - if (port > 0 || notifyEnabled(EnumCallback.SYNC)) + if (port != 0 || notifyEnabled(EnumCallback.SYNC)) jmolCallbackListener.notifyCallback(EnumCallback.SYNC, new Object[] { null, script, appletName, Integer.valueOf(port) }); } Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Viewer.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/jmol/viewer/Viewer.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -8605,7 +8605,7 @@ @Override public void syncScript(String script, String applet, int port) { - if (script.equalsIgnoreCase(SYNC_GRAPHICS_MESSAGE)) { + if (script != null && script.equalsIgnoreCase(SYNC_GRAPHICS_MESSAGE)) { statusManager.setSyncDriver(StatusManager.SYNC_STEREO); statusManager.syncSend(script, applet, 0); setBooleanProperty("_syncMouse", false); Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JmolPanel.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -91,61 +91,99 @@ public class JmolPanel extends JPanel implements SplashInterface, JsonNioClient { - /** - * The data model. - */ + static HistoryFile historyFile; public JmolViewer viewer; + JmolAdapter modelAdapter; JmolApp jmolApp; + StatusBar status; + int startupWidth, startupHeight; + JsonNioService serverService; - DisplayPanel display; - StatusBar status; + protected String appletContext; + protected PropertyChangeSupport pcs = new PropertyChangeSupport(this); + protected DisplayPanel display; protected GaussianDialog gaussianDialog; - private PreferencesDialog preferencesDialog; - RecentFilesDialog recentFiles; - //private JMenu recentFilesMenu; - public AtomSetChooser atomSetChooser; - private ExecuteScriptAction executeScriptAction; + protected RecentFilesDialog recentFiles; + protected AtomSetChooser atomSetChooser; protected JFrame frame; + protected SplashInterface splash; + protected JFrame consoleframe; + protected JsonNioService service; + protected GuiMap guimap = new GuiMap(); + protected int qualityJPG = -1; + protected int qualityPNG = -1; + protected String imageType; - protected // private CDKPluginManager pluginManager; + private ExecuteScriptAction executeScriptAction; + private PreferencesDialog preferencesDialog; + private StatusListener myStatusListener; + private SurfaceTool surfaceTool; - GuiMap guimap = new GuiMap(); + private Map<String, Action> commands; + private Map<String, JMenuItem> menuItems; + private JMenuBar menubar; + private JToolBar toolbar; - private static int numWindows = 0; - private static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + // --- action implementations ----------------------------------- - int startupWidth, startupHeight; + private ExportAction exportAction = new ExportAction(); + private PovrayAction povrayAction = new PovrayAction(); + private ToWebAction toWebAction = new ToWebAction(); + private WriteAction writeAction = new WriteAction(); + private PrintAction printAction = new PrintAction(); + private CopyImageAction copyImageAction = new CopyImageAction(); + private CopyScriptAction copyScriptAction = new CopyScriptAction(); + private SurfaceToolAction surfaceToolAction = new SurfaceToolAction(); + private PasteClipboardAction pasteClipboardAction = new PasteClipboardAction(); + private ViewMeasurementTableAction viewMeasurementTableAction = new ViewMeasurementTableAction(); - PropertyChangeSupport pcs = new PropertyChangeSupport(this); - + private static int numWindows = 0; + private static KioskFrame kioskFrame; + private static BannerFrame bannerFrame; + // Window names for the history file - //private final static String CONSOLE_WINDOW_NAME = "Console"; private final static String EDITOR_WINDOW_NAME = "ScriptEditor"; private final static String SCRIPT_WINDOW_NAME = "ScriptWindow"; private final static String FILE_OPEN_WINDOW_NAME = "FileOpen"; private final static String WEB_MAKER_WINDOW_NAME = "JmolWebPageMaker"; private final static String SURFACETOOL_WINDOW_NAME = "SurfaceToolWindow"; - - /** - * Button group for toggle buttons in the toolbar. - */ + private final static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); - protected SplashInterface splash; + // these correlate with items xxx in GuiMap.java + // that have no associated xxxScript property listed + // in org.openscience.jmol.Properties.Jmol-resources.properties - protected JFrame consoleframe; - - String appletContext; - - static HistoryFile historyFile; - private static KioskFrame kioskFrame; - private static JsonNioService service; + private static final String newwinAction = "newwin"; + private static final String openAction = "open"; + private static final String openurlAction = "openurl"; + private static final String openpdbAction = "openpdb"; + private static final String openmolAction = "openmol"; + private static final String newAction = "new"; + private static final String exportActionProperty = "export"; + private static final String closeAction = "close"; + private static final String exitAction = "exit"; + private static final String aboutAction = "about"; + private static final String whatsnewAction = "whatsnew"; + private static final String uguideAction = "uguide"; + private static final String printActionProperty = "print"; + private static final String recentFilesAction = "recentFiles"; + private static final String povrayActionProperty = "povray"; + private static final String writeActionProperty = "write"; + private static final String editorAction = "editor"; + private static final String consoleAction = "console"; + private static final String toWebActionProperty = "toweb"; + private static final String atomsetchooserAction = "atomsetchooser"; + private static final String copyImageActionProperty = "copyImage"; + private static final String copyScriptActionProperty = "copyScript"; + private static final String surfaceToolActionProperty = "surfaceTool"; private static final String pasteClipboardActionProperty = "pasteClipboard"; + private static final String gaussianAction = "gauss"; + private static final String resizeAction = "resize"; + //private static final String saveasAction = "saveas"; + //private static final String vibAction = "vibrate"; - private StatusListener myStatusListener; - private static BannerFrame bannerFrame; - public JmolPanel(JmolApp jmolApp, Splash splash, JFrame frame, JmolPanel parent, int startupWidth, int startupHeight, String commandOptions, Point loc) { @@ -286,7 +324,6 @@ } } frame.getContentPane().add("Center", this); - frame.addWindowListener(new AppCloser()); frame.pack(); frame.setSize(startupWidth, startupHeight); @@ -378,17 +415,18 @@ } if (jmolApp.port > 0) { try { - service = new JsonNioService(); - //service.setContentPath("./%ID%.json"); - //service.setTerminatorMessage("NEXT_SCRIPT"); - service.startService(jmolApp.port, jmol, jmol.viewer); + jmol.service = new JsonNioService(); + jmol.service.startService(jmolApp.port, jmol, jmol.viewer, "-1"); +// JsonNioService service2 = new JsonNioService(); +// service2.startService(jmolApp.port, jmol, null, "-2"); +// service2.sendMessage(null, "test", null); } catch (Throwable e) { e.printStackTrace(); if (bannerFrame != null) { bannerFrame.setLabel("could not start NIO service on port " + jmolApp.port); } - if (service != null) - service.close(); + if (jmol.service != null) + jmol.service.close(); } } @@ -486,7 +524,7 @@ splash.showStatus(message); } - void report(String str) { + private void report(String str) { if (jmolApp.isSilent) return; Logger.info(str); @@ -528,7 +566,7 @@ } } - void doClose() { + protected void doClose() { dispose(this.frame); } @@ -894,13 +932,6 @@ return menu; } - void setButtonMode(String string) { - if (string.equals("modelkit")) - display.buttonModelkit.setSelected(true); - else if (string.equals("rotate")) - display.buttonRotate.setSelected(true); - } - private static class ActionChangedListener implements PropertyChangeListener { AbstractButton button; @@ -925,60 +956,6 @@ } } - private Map<String, Action> commands; - private Map<String, JMenuItem> menuItems; - private JMenuBar menubar; - protected JToolBar toolbar; - - // these correlate with items xxx in GuiMap.java - // that have no associated xxxScript property listed - // in org.openscience.jmol.Properties.Jmol-resources.properties - - private static final String newwinAction = "newwin"; - private static final String openAction = "open"; - private static final String openurlAction = "openurl"; - private static final String openpdbAction = "openpdb"; - private static final String openmolAction = "openmol"; - private static final String newAction = "new"; - //private static final String saveasAction = "saveas"; - private static final String exportActionProperty = "export"; - private static final String closeAction = "close"; - private static final String exitAction = "exit"; - private static final String aboutAction = "about"; - //private static final String vibAction = "vibrate"; - private static final String whatsnewAction = "whatsnew"; - private static final String uguideAction = "uguide"; - private static final String printActionProperty = "print"; - private static final String recentFilesAction = "recentFiles"; - private static final String povrayActionProperty = "povray"; - private static final String writeActionProperty = "write"; - private static final String editorAction = "editor"; - private static final String consoleAction = "console"; - private static final String toWebActionProperty = "toweb"; - private static final String atomsetchooserAction = "atomsetchooser"; - private static final String copyImageActionProperty = "copyImage"; - private static final String copyScriptActionProperty = "copyScript"; - private static final String surfaceToolActionProperty = "surfaceTool"; private static final String pasteClipboardActionProperty = "pasteClipboard"; - private static final String gaussianAction = "gauss"; - private static final String resizeAction = "resize"; - - // --- action implementations ----------------------------------- - - private ExportAction exportAction = new ExportAction(); - private PovrayAction povrayAction = new PovrayAction(); - private ToWebAction toWebAction = new ToWebAction(); - private WriteAction writeAction = new WriteAction(); - private PrintAction printAction = new PrintAction(); - private CopyImageAction copyImageAction = new CopyImageAction(); - private CopyScriptAction copyScriptAction = new CopyScriptAction(); - private SurfaceToolAction surfaceToolAction = new SurfaceToolAction(); - private PasteClipboardAction pasteClipboardAction = new PasteClipboardAction(); - private ViewMeasurementTableAction viewMeasurementTableAction = new ViewMeasurementTableAction(); - - int qualityJPG = -1; - int qualityPNG = -1; - String imageType; - /** * Actions defined by the Jmol class */ @@ -1418,7 +1395,7 @@ display.measurementTable.activate(); } } - SurfaceTool surfaceTool; + void createSurfaceTool(){ //TODO check to see if it already exists, if so bring to front. if(surfaceTool!=null){ Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JsonNioService.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JsonNioService.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/JsonNioService.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -27,6 +27,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.net.InetSocketAddress; import java.util.Calendar; import javax.vecmath.Point3f; @@ -34,13 +35,18 @@ import org.jmol.api.JmolCallbackListener; import org.jmol.api.JmolViewer; import org.jmol.constant.EnumCallback; +import org.jmol.util.Logger; import org.jmol.util.TextFormat; import com.json.JSONObject; import com.json.JSONTokener; +import naga.ConnectionAcceptor; +import naga.NIOServerSocket; import naga.NIOService; import naga.NIOSocket; +import naga.ServerSocketObserver; +import naga.ServerSocketObserverAdapter; import naga.SocketObserver; import naga.packetreader.AsciiLinePacketReader; import naga.packetwriter.RawPacketWriter; @@ -111,7 +117,7 @@ * "zoomByFactor <float:factor> <int:x> <int:y>" (with center reset) * */ -public class JsonNioService extends NIOService implements JmolCallbackListener { +public class JsonNioService extends NIOService { protected NIOSocket inSocket; protected NIOSocket outSocket; @@ -135,29 +141,28 @@ super(); } - public void startService(int port, JsonNioClient client, JmolViewer jmolViewer) + public void startService(int port, JsonNioClient client, JmolViewer jmolViewer, String name) throws IOException { this.client = client; this.jmolViewer = jmolViewer; if (port < 0) { + startServerService(-port, name); return; } - - jmolViewer.setJmolCallbackListener(this); - jmolViewer.script(";sync on;sync slave"); - String s = getJmolValue("NIOcontentPath"); - if (s != null) - contentPath = s; - s = getJmolValue("NIOterminatorMessage"); - if (s != null) - terminatorMessage = s; - System.out.println("JsonNioService using port " + port); - System.out.println("contentPath=" + contentPath); - System.out.println("terminatorMessage=" + terminatorMessage); - - + if (jmolViewer != null) { + jmolViewer.script(";sync on;sync slave"); + String s = getJmolValue("NIOcontentPath"); + if (s != null) + contentPath = s; + s = getJmolValue("NIOterminatorMessage"); + if (s != null) + terminatorMessage = s; + System.out.println("contentPath=" + contentPath); + System.out.println("terminatorMessage=" + terminatorMessage); + } + System.out.println("JsonNioService" + name + " using port " + port); inSocket = openSocket("127.0.0.1", port); outSocket = openSocket("127.0.0.1", port); inSocket.setPacketReader(new AsciiLinePacketReader()); @@ -186,17 +191,120 @@ } public void packetReceived(NIOSocket nioSocket, byte[] packet) { + System.out.println(Thread.currentThread().getName() + " outSocket packetRecieved " + (new String(packet))); } public void connectionBroken(NIOSocket nioSocket, Exception exception) { } }); - thread = new Thread(new JsonNioThread(), "JsonNiosThread"); + thread = new Thread(new JsonNioThread(), "JsonNiosThread" + name); thread.start(); } + /* + * serverSocket.listen(new ServerSocketObserver() { + + public void acceptFailed(IOException arg0) { + } + + public void newConnection(NIOSocket arg0) { + // TODO + + } + + public void serverSocketDied(Exception arg0) { + } + + }); + + */ + + private NIOServerSocket serverSocket; + private Thread serverThread; + + class JsonNioServerThread implements Runnable { + + public void run() { + // Keep reading IO forever. + try { + while (true) { + selectBlocking(); + } + } catch (IOException e) { + // TODO + } + + } + + } + + private void startServerService(int port, String name) { + try { + serverSocket = openServerSocket(port); + Logger.info("JsonNioServiceServer" + name + " on port " + port); + serverSocket.listen(new ServerSocketObserverAdapter() { + + + @Override + public void newConnection(NIOSocket nioSocket) { + System.out.println("Received connection: " + nioSocket); + + // Set a 1 byte header regular reader. + nioSocket.setPacketReader(new AsciiLinePacketReader()); + + // Set a 1 byte header regular writer. + nioSocket.setPacketWriter(new RawPacketWriter()); + + // Listen on the connection. + nioSocket.listen(new SocketObserver() { + public void packetReceived(NIOSocket socket, byte[] packet) { + System.out.println("received " + new String(packet)); +// try { + // Create the outgoing packet. + //socket.write(byteArrayOutputStream.toByteArray()); + + // Close after the packet has finished writing. + // socket.closeAfterWrite(); + socket.close(); + // } catch (IOException e) { + // No error handling to speak of. + // socket.close(); + // } + } + + public void connectionBroken(NIOSocket arg0, Exception arg1) { + // TODO + + } + + public void connectionOpened(NIOSocket arg0) { + // TODO + + } + }); + } + }); + + serverSocket.setConnectionAcceptor(new ConnectionAcceptor() { + public boolean acceptConnection(InetSocketAddress arg0) { + return (arg0.getAddress().isAnyLocalAddress()); + } + }); + + } catch (IOException e) { + // TODO + } + + if (serverThread != null) + serverThread.interrupt(); + serverThread = new Thread(new JsonNioServerThread(), "JsonNioServerThread" + name); + serverThread.start(); + } + private String getJmolValue(String var) { + if (jmolViewer == null) + return ""; String s = (String) jmolViewer.scriptWaitStatus("print " + var, "output"); return (s.indexOf("\n") <= 1 ? null : s.substring(0, s.lastIndexOf("\n"))); } @@ -216,7 +324,8 @@ } catch (Throwable e) { // } - client.nioClosed(); + if (client != null) + client.nioClosed(); } class JsonNioThread implements Runnable { @@ -249,7 +358,12 @@ protected void processMessage(byte[] packet) { try { - JSONObject json = new JSONObject(new String(packet)); + String msg = new String(packet); + if (jmolViewer == null) { + Logger.info("JNIOS " + Thread.currentThread().getName() + " received " + msg); + return; + } + JSONObject json = new JSONObject(msg); switch (("move......" + "command..." + "content..." + "quit......" + "touch.....").indexOf(json.getString("type"))) { case 0: // move @@ -313,7 +427,7 @@ break; case 30: // quit halt = true; - System.out.println("JsonNiosService quitting"); + Logger.info("JsonNiosService quitting"); break; case 40: // touch // raw touch event @@ -329,13 +443,15 @@ } } - protected void sendMessage(JSONObject json, String msg, NIOSocket socket) { + public void sendMessage(JSONObject json, String msg, NIOSocket socket) { try { - if (msg != null) { + if (msg != null && msg.indexOf("{") != 0) { json = new JSONObject(); json.put("magic", "JmolApp"); json.put("role", msg); } + if (socket == null) + socket = outSocket; String jsonString = json.toString() + "\r\n"; socket.write(jsonString.getBytes("UTF-8")); } catch (Throwable e) { @@ -343,37 +459,41 @@ } } - public boolean notifyEnabled(EnumCallback type) { - switch (type) { - case SCRIPT: - return true; - default: - return false; + public void scriptCallback(String msg) { + if (msg.equals(terminatorMessage)) { + try { + JSONObject json = new JSONObject(); + json.put("type", "script"); + json.put("event", "done"); + sendMessage(json, null, outSocket); + } catch (Throwable e) { + e.printStackTrace(); + } } } - public void notifyCallback(EnumCallback type, Object[] data) { - switch (type) { - case SCRIPT: - String msg = (String) data[1]; - if (msg.equals(terminatorMessage)) { - try { - JSONObject json = new JSONObject(); - json.put("type", "script"); - json.put("event", "done"); - sendMessage(json, null, outSocket); - } catch (Throwable e) { - e.printStackTrace(); - } - } - break; - default: - break; + public void send(int port, String strInfo) { + try { + JsonNioService jns = new JsonNioService(); + jns.sendMessage(port, strInfo); + jns.close(); + } catch (IOException e) { + // ignore } } - public void setCallbackFunction(String callbackType, String callbackFunction) { - // unused + private void sendMessage(int port, String strInfo) { + try { + outSocket = openSocket("127.0.0.1", port); + outSocket.setPacketWriter(new RawPacketWriter()); + + outSocket.write(strInfo.getBytes()); + } catch (IOException e) { + // TODO + } + + + } } Modified: trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java =================================================================== --- trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/openscience/jmol/app/jmolpanel/StatusListener.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -32,6 +32,7 @@ import org.jmol.util.Logger; import org.openscience.jmol.app.webexport.WebExport; +import java.io.IOException; import java.lang.reflect.Method; import java.net.URI; import java.util.Map; @@ -164,6 +165,8 @@ return; } // cases that fail to return are sent to the console for processing + if (jmol.service != null) + jmol.service.scriptCallback(strInfo); JmolCallbackListener appConsole = (JmolCallbackListener) viewer .getProperty("DATA_API", "getAppConsole", null); if (appConsole != null) @@ -171,14 +174,28 @@ } private void sendNioMessage(int port, String strInfo) { - if (strInfo == null) + if (port < 0) { + try { + jmol.serverService = new JsonNioService(); + jmol.serverService.startService(port, jmol, null, "-1"); + } catch (IOException e) { + // TODO + } return; - //JsonNioService.send(port, strInfo); + } + if (strInfo == null || jmol.service == null) + return; +// jmol.service.sendMessage(null, strInfo, null); + System.out.println("sendNioMessage " + port + " " + strInfo); + jmol.service.send(port, strInfo); } public void setCallbackFunction(String callbackType, String callbackFunction) { if (callbackType.equals("modelkit")) { - jmol.setButtonMode(callbackFunction.equals("ON") ? "modelkit" : "rotate"); + if (callbackFunction.equals("ON")) + display.buttonModelkit.setSelected(true); + else + display.buttonRotate.setSelected(true); return; } //if (callbackType.equalsIgnoreCase("menu")) { Modified: trunk/Jmol/src/org/openscience/molecularplayground/MPJmolApp.java =================================================================== --- trunk/Jmol/src/org/openscience/molecularplayground/MPJmolApp.java 2011-09-28 18:45:59 UTC (rev 16174) +++ trunk/Jmol/src/org/openscience/molecularplayground/MPJmolApp.java 2011-09-28 21:55:43 UTC (rev 16175) @@ -70,7 +70,7 @@ jmolViewer.script("NIOcontentPath=\"" + path + "\";NIOterminatorMessage='MP_DONE'"); service = new JsonNioService(); - service.startService(port, this, jmolViewer); + service.startService(port, this, jmolViewer, "-MP"); // Bob's demo model jmolViewer This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |