diff options
| author | Magdalena Grodzińska <mag.grodzinska@gmail.com> | 2019-12-23 19:07:46 +0100 | 
|---|---|---|
| committer | Magdalena Grodzińska <mag.grodzinska@gmail.com> | 2019-12-23 19:07:46 +0100 | 
| commit | 6af48bd213350954914e899b2bf23ebd0da5ed22 (patch) | |
| tree | 4e256e16e12a2271f7eddc8c889199f0fe5bd7b5 /src/main/java | |
| parent | 3b19a4abfdad42beb3e8c34fe902bd5c0c2aaf4e (diff) | |
Implement executor and event bus dispatch on threads and queues
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/pl/edu/mimuw/cloudatlas/agent/Agent.java | 77 | 
1 files changed, 73 insertions, 4 deletions
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/Agent.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/Agent.java index 8eb8b4f..0cfdfd6 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/Agent.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/Agent.java @@ -4,24 +4,93 @@ import java.rmi.RemoteException;  import java.rmi.registry.LocateRegistry;  import java.rmi.registry.Registry;  import java.rmi.server.UnicastRemoteObject; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import pl.edu.mimuw.cloudatlas.agent.message.AgentMessage;  import pl.edu.mimuw.cloudatlas.api.Api;  import pl.edu.mimuw.cloudatlas.interpreter.Main;  import pl.edu.mimuw.cloudatlas.model.ZMI;  public class Agent { -    public static void main(String[] args) { + +    public static void runRegistry() {          try {              ZMI root = Main.createTestHierarchy2();              ApiImplementation api = new ApiImplementation(root);              Api apiStub = -                (Api) UnicastRemoteObject.exportObject(api, 0); +                    (Api) UnicastRemoteObject.exportObject(api, 0);              Registry registry = LocateRegistry.getRegistry();              registry.rebind("Api", apiStub); -            System.out.println("Api bound"); +            System.out.println("Agent: api bound");          } catch (Exception e) { -            System.err.println("Agent exception:"); +            System.err.println("Agent registry initialization exception:");              e.printStackTrace();          }      } + +    public static HashMap<AgentMessage.AgentModule, Module> initializeModules() { +        HashMap<AgentMessage.AgentModule, Module> modules = new HashMap<AgentMessage.AgentModule, Module>(); +        // TODO add modules as we implement them +        return modules; +    } + +    public static HashMap<AgentMessage.AgentModule, Executor> initializeExecutors( +            HashMap<AgentMessage.AgentModule, Module> modules) { +        HashMap<AgentMessage.AgentModule, Executor> executors = new HashMap<AgentMessage.AgentModule, Executor>(); +        Iterator it = modules.entrySet().iterator(); + +        while (it.hasNext()) { +            Map.Entry<AgentMessage.AgentModule, Module> moduleEntry = +                    (Map.Entry<AgentMessage.AgentModule, Module>) it.next(); +            Module module = moduleEntry.getValue(); +            Executor executor = new Executor(module); +            executors.put(moduleEntry.getKey(), executor); +        } + +        return executors; +    } + +    public static ArrayList<Thread>  initializeExecutorThreads(HashMap<AgentMessage.AgentModule, Executor> executors) { +        ArrayList<Thread> executorThreads = new ArrayList<Thread>(); +        Iterator it = executors.entrySet().iterator(); + +        while (it.hasNext()) { +            Map.Entry<AgentMessage.AgentModule, Executor> executorEntry = +                    (Map.Entry<AgentMessage.AgentModule, Executor>) it.next(); +            Thread thread = new Thread(executorEntry.getValue()); +            thread.setDaemon(true); +            System.out.println("Initializing executor " + executorEntry.getKey()); +            thread.start(); +            executorThreads.add(thread); +        } + +        return executorThreads; +    } + +    public static void closeExecutors(ArrayList<Thread> executorThreads) { +        for (Thread executorThread : executorThreads) { +            executorThread.interrupt(); +        } +    } + +    public static void runModulesAsThreads() { +        HashMap<AgentMessage.AgentModule, Module> modules = initializeModules(); +        HashMap<AgentMessage.AgentModule, Executor> executors = initializeExecutors(modules); +        ArrayList<Thread> executorThreads = initializeExecutorThreads(executors); + +        Thread eventBusThread = new Thread(new EventBus(executors)); +        System.out.println("Initializing event bus"); +        eventBusThread.start(); + +        System.out.println("Closing executors"); +        closeExecutors(executorThreads); +    } + +    public static void main(String[] args) { +        runRegistry(); +        runModulesAsThreads(); +    }  }  |