示例#1
0
        protected internal virtual void HandleEvent(VariableEvent @event)
        {
            var sourceScope = @event.SourceScope;

            if (sourceScope is ExecutionEntity)
            {
                AddEventToScopeExecution((ExecutionEntity)sourceScope, @event);
            }
            else if (sourceScope is TaskEntity)
            {
                TaskEntity      task      = (TaskEntity)sourceScope;
                ExecutionEntity execution = task.GetExecution();
                if (execution != null)
                {
                    AddEventToScopeExecution(execution, @event);
                }
            }
            else if (sourceScope.ParentVariableScope is ExecutionEntity)
            {
                AddEventToScopeExecution((ExecutionEntity)sourceScope.ParentVariableScope, @event);
            }
            else
            {
                throw new ProcessEngineException("BPMN execution scope expected");
            }
        }
示例#2
0
 public void RegisterListenerForVariable(HomeSimCockpitSDK.VariableChangeSignalDelegate listenerMethod, string variableID, HomeSimCockpitSDK.VariableType type)
 {
     if (!_variablesListeners.ContainsKey(variableID))
     {
         VariableEvent ve = new VariableEvent();
         _variablesListeners.Add(variableID, ve);
     }
     _variablesListeners[variableID].Signal += listenerMethod;
 }
        public virtual void LeaveOnSatisfiedCondition(EventSubscriptionEntity eventSubscription,
                                                      VariableEvent variableEvent)
        {
            PvmExecutionImpl execution = eventSubscription.Execution;

            if (execution != null && !execution.IsEnded && execution.IsScope &&
                ConditionalEvent.TryEvaluate(variableEvent, execution))
            {
                execution.ExecuteEventHandlerActivity(eventSubscription.Activity);
            }
        }
示例#4
0
 public void RegisterListenerForVariable(HomeSimCockpitSDK.VariableChangeSignalDelegate listenerMethod, string variableID, HomeSimCockpitSDK.VariableType type)
 {
     if (type != HomeSimCockpitSDK.VariableType.Int)
     {
         throw new Exception(string.Format("Nieobsługiwany typ '{0}' zmiennej '{1}'.", type, variableID));
     }
     if (!_variablesListeners.ContainsKey(variableID))
     {
         VariableEvent ve = new VariableEvent(variableID);
         _variablesListeners.Add(variableID, ve);
     }
     _variablesListeners[variableID].Signal += listenerMethod;
 }
示例#5
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: @Override public void notify(org.camunda.bpm.engine.delegate.DelegateExecution execution) throws Exception
        public virtual void notify(DelegateExecution execution)
        {
            if (!execution.hasVariableLocal(variableName))
            {
                return;
            }

            object value = execution.getVariableLocal(variableName);

            VariableEvent @event = new VariableEvent();

            @event.variableName       = variableName;
            @event.variableValue      = value;
            @event.eventName          = execution.EventName;
            @event.activityInstanceId = execution.ActivityInstanceId;

            variableEvents.Add(@event);
        }
示例#6
0
        public virtual void LeaveOnSatisfiedCondition(EventSubscriptionEntity eventSubscription,
                                                      VariableEvent variableEvent)
        {
            PvmExecutionImpl execution = eventSubscription.Execution;

            if (execution != null && !execution.IsEnded && variableEvent != null && ConditionalEvent.TryEvaluate(variableEvent, execution) && execution.IsActive && execution.IsScope)
            {
                if (IsAfterEventBasedGateway)
                {
                    ActivityImpl activity = eventSubscription.Activity;
                    execution.ExecuteEventHandlerActivity(activity);
                }
                else
                {
                    Leave(execution);
                }
            }
        }
示例#7
0
        public void Notify(IBaseDelegateExecution execution)
        {
            if (!execution.HasVariableLocal(VariableName))
            {
                return;
            }

            object value = execution.GetVariableLocal(VariableName);

            VariableEvent @event = new VariableEvent();

            @event.VariableName       = VariableName;
            @event.VariableValue      = value;
            @event.EventName          = execution.EventName;
            @event.ActivityInstanceId = (execution as IDelegateExecution)?.ActivityInstanceId;

            variableEvents.Add(@event);
        }
示例#8
0
        private void ClientThread(object client)
        {
            NetworkStream stream    = null;
            TcpClient     tcpClient = client as TcpClient;

            try
            {
                stream = tcpClient.GetStream();
                while (_working)
                {
                    byte[]       data  = new byte[1];
                    IAsyncResult async = stream.BeginRead(data, 0, 1, null, null);
                    if (stream.EndRead(async) == 0)
                    {
                        break;
                    }
                    bool isVariable = data[0] == 1;
                    data  = new byte[4];
                    async = stream.BeginRead(data, 0, 4, null, null);
                    if (stream.EndRead(async) == 0)
                    {
                        break;
                    }
                    int length = BitConverter.ToInt32(data, 0);
                    if (length > 0)
                    {
                        data  = new byte[length];
                        async = stream.BeginRead(data, 0, length, null, null);
                        if (stream.EndRead(async) == 0)
                        {
                            break;
                        }
                        if (isVariable)
                        {
                            Variable      v  = Variable.Deserialize(new MemoryStream(data));
                            VariableEvent ve = null;
                            if (_variablesListeners.TryGetValue(v.ID, out ve))
                            {
                                ve.FireSignal(v);
                            }
                        }
                    }
                }
            }
            catch (ThreadAbortException)
            { }
            catch (Exception ex)
            {
                _log.Log(this, "Błąd połączenia z klientem: " + tcpClient.Client.RemoteEndPoint.ToString() + ", błąd: " + ex.Message);
            }
            finally
            {
                _log.Log(this, "Zamknięto połączenie z klientem: " + tcpClient.Client.RemoteEndPoint.ToString());
                if (stream != null)
                {
                    try
                    {
                        stream.Close();
                        stream.Dispose();
                        stream = null;
                    }
                    catch { }
                }
                if (tcpClient != null)
                {
                    try
                    {
                        tcpClient.Close();
                        tcpClient = null;
                    }
                    catch { }
                }
            }
        }
示例#9
0
 public virtual bool tryEvaluate(VariableEvent variableEvent, DelegateExecution execution)
 {
     return((variableEvent == null || shouldEvaluateForVariableEvent(variableEvent)) && tryEvaluate(execution));
 }
示例#10
0
 public virtual bool shouldEvaluateForVariableEvent(VariableEvent @event)
 {
     return((string.ReferenceEquals(variableName, null) || @event.VariableInstance.Name.Equals(variableName)) && ((variableEvents == null || variableEvents.Count == 0) || variableEvents.Contains(@event.EventName)));
 }
示例#11
0
 public virtual void DispatchEvent(VariableEvent variableEvent)
 {
     // default implementation does nothing
 }
示例#12
0
 public void AttachVariableEvent(string variable, VariableEvent variableEvent)
 {
     _variableEvents.Add(variable, variableEvent);
 }
 public virtual bool TryEvaluate(VariableEvent variableEvent, IDelegateExecution execution)
 {
     return(((variableEvent == null) || ShouldEvaluateForVariableEvent(variableEvent)) && TryEvaluate(execution));
 }
示例#14
0
        protected internal virtual void AddEventToScopeExecution(ExecutionEntity sourceScope, VariableEvent @event)
        {
            // ignore events of variables that are not set in an execution
            ExecutionEntity sourceExecution = sourceScope;
            ExecutionEntity scopeExecution  = (ExecutionEntity)(sourceExecution.IsScope ? sourceExecution : sourceExecution.Parent);

            scopeExecution.DelayEvent((ExecutionEntity)TargetScope, @event);
        }
示例#15
0
 public DelayedVariableEvent(PvmExecutionImpl targetScope, VariableEvent @event)
 {
     this.targetScope = targetScope;
     this.@event      = @event;
 }