Mercurial > hg > RemoteEditor > REPSessionManager
view test/sematest/TestSessionManager.java @ 385:1fca50ce3508
first-working-version
author | one@firefly.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Mon, 10 Nov 2008 22:18:14 +0900 |
parents | bcdf5476b8e4 |
children | 648c676bf9df |
line wrap: on
line source
package test.sematest; import java.io.IOException; import rep.SessionManager; import rep.channel.REPLogger; import rep.channel.REPServerSocketChannel; import rep.gui.SessionManagerEvent; import rep.gui.SessionManagerGUI; public class TestSessionManager { static public REPLogger logger = REPLogger.singleton(); public int masterPort = 8766; public String host = "localhost"; public SessionManager sessionManagers[]; public SessionManager slaveSessionManagers[]; public TestEditor editors[]; /* * All test is performed in localhost, so all session manager * should have differenct port number each other. */ /* * Test Pattern List * Connect port for each editor * Master/client flag for each editor * Editor or slave session manager must be started by * master session managers using syncExec. */ public int editorPort[] = {masterPort,masterPort,masterPort}; public boolean editorMaster[] = {true,false,false,false}; private SessionManagerEvent ev1[] = { new SessionManagerEvent() { // executed before first select(); public void exec(SessionManager manager) { for(TestEditor editor:editors) { editor.start(); } int i = sessionManagers.length; for(SessionManager slave:slaveSessionManagers) { i = startSessionManager(slave,i,masterPort + i); } } }}; /* * Create all editors, master session managers and slave session * managers with specified port. All instances are not started yet. */ public TestSessionManager(int sm, int ss, int e) { sessionManagers = new SessionManager[sm]; slaveSessionManagers = new SessionManager[ss]; editors = new TestEditor[e]; for(int i=0;i<sm;i++) { sessionManagers[i] = new SessionManager(); } for(int i=0;i<ss;i++) { slaveSessionManagers[i] = new SessionManager(); } for(int i=0;i<e;i++) { int port = editorPort[i%editorPort.length]; boolean master = editorMaster[i%editorMaster.length]; // TestEditor extends Thread editors[i] = new TestEditor("Editor"+i,host,port,master); } } /* * start session manager. sm.init(port,guit) is a mainloop, so * we need Thread here. */ int startSessionManager(final SessionManager sm,int i,int port) { final SessionManagerGUI gui = new TestGUI(sm); final int port1 = port; logger.writeLog("TestSessionManager.startSessionManager() : start SessionManager"); // syncExec does not wake selector, do this before run(). sm.setReceivePort(port1); setSMEvent(sm,i); Runnable start = new Runnable() { public void run() { try { sm.init(port1,gui); } catch (IOException e) { } catch (InterruptedException e) { } } }; new Thread(start).start(); return i+1; } public void setSMEvent(SessionManager s,int i) { if (i<ev1.length) { s.syncExec(ev1[i]); } return ; } protected void startTest() { int i = 0; for(SessionManager master:sessionManagers) { i = startSessionManager(master,i, masterPort + i); } } public static void main(String[] args){ /* * set simulation mode * isSimulation=true thread base simulation for PathFinder * isSimulation=false socket based communication mode */ REPServerSocketChannel.isSimulation = true; // At least 3 TestEditors are required. TestSessionManager test = new TestSessionManager(1, 0, 3); logger.setLogLevel(5); test.startTest(); } }