/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.api.machine.execagent; import com.google.inject.Singleton; import org.eclipse.che.api.machine.shared.dto.execagent.event.ProcessDiedEventDto; import org.eclipse.che.api.machine.shared.dto.execagent.event.ProcessStartedEventDto; import org.eclipse.che.api.machine.shared.dto.execagent.event.ProcessStdErrEventDto; import org.eclipse.che.api.machine.shared.dto.execagent.event.ProcessStdOutEventDto; import org.eclipse.che.ide.api.machine.ExecAgentEventManager; import org.eclipse.che.ide.util.loging.Log; import javax.inject.Inject; import java.util.function.Consumer; /** * Implementation based on json rpc protocol calls * * @author Dmitry Kuleshov */ @Singleton public class JsonRpcExecAgentEventManager implements ExecAgentEventManager { private final ProcessDiedEventHandler processDiedEventHandler; private final ProcessStartedEventHandler processStartedEventHandler; private final ProcessStdErrEventHandler processStdErrEventHandler; private final ProcessStdOutEventHandler processStdOutEventHandler; @Inject public JsonRpcExecAgentEventManager(ProcessDiedEventHandler processDiedEventHandler, ProcessStartedEventHandler processStartedEventHandler, ProcessStdErrEventHandler processStdErrEventHandler, ProcessStdOutEventHandler processStdOutEventHandler) { this.processDiedEventHandler = processDiedEventHandler; this.processStartedEventHandler = processStartedEventHandler; this.processStdErrEventHandler = processStdErrEventHandler; this.processStdOutEventHandler = processStdOutEventHandler; } @Override public void registerProcessDiedConsumer(String endpointId, int pid, Consumer<ProcessDiedEventDto> consumer) { Log.debug(getClass(), "Registering consumer for process died event for PID: " + pid); processDiedEventHandler.registerConsumer(endpointId, pid, consumer); } @Override public void registerProcessStartedConsumer(String endpointId, int pid, Consumer<ProcessStartedEventDto> consumer) { Log.debug(getClass(), "Registering consumer for process started event for PID: " + pid); processStartedEventHandler.registerConsumer(endpointId, pid, consumer); } @Override public void registerProcessStdErrConsumer(String endpointId, int pid, Consumer<ProcessStdErrEventDto> consumer) { Log.debug(getClass(), "Registering consumer for process standard output event for PID: " + pid); processStdErrEventHandler.registerConsumer(endpointId, pid, consumer); } @Override public void registerProcessStdOutConsumer(String endpointId, int pid, Consumer<ProcessStdOutEventDto> consumer) { Log.debug(getClass(), "Registering consumer for process error output event for PID: " + pid); processStdOutEventHandler.registerConsumer(endpointId, pid, consumer); } @Override public void cleanPidConsumer(String endpointId, int pid) { processDiedEventHandler.unregisterConsumers(endpointId, pid); processStartedEventHandler.unregisterConsumers(endpointId, pid); processStdErrEventHandler.unregisterConsumers(endpointId, pid); processStdOutEventHandler.unregisterConsumers(endpointId, pid); } }