| /* |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| namespace DotPulsar.Internal |
| { |
| using Abstractions; |
| using Events; |
| using System; |
| using System.Threading; |
| using System.Threading.Tasks; |
| |
| public abstract class Process : IProcess |
| { |
| protected readonly CancellationTokenSource CancellationTokenSource; |
| protected ChannelState ChannelState; |
| protected ExecutorState ExecutorState; |
| |
| protected Process(Guid correlationId) |
| { |
| CancellationTokenSource = new CancellationTokenSource(); |
| ChannelState = ChannelState.Disconnected; |
| ExecutorState = ExecutorState.Ok; |
| CorrelationId = correlationId; |
| } |
| |
| public Guid CorrelationId { get; } |
| |
| public void Start() |
| => CalculateState(); |
| |
| public abstract ValueTask DisposeAsync(); |
| |
| public void Handle(IEvent e) |
| { |
| switch (e) |
| { |
| case ExecutorFaulted _: |
| ExecutorState = ExecutorState.Faulted; |
| break; |
| case ChannelActivated _: |
| ChannelState = ChannelState.Active; |
| break; |
| case ChannelClosedByServer _: |
| ChannelState = ChannelState.ClosedByServer; |
| break; |
| case ChannelConnected _: |
| ChannelState = ChannelState.Connected; |
| break; |
| case ChannelDeactivated _: |
| ChannelState = ChannelState.Inactive; |
| break; |
| case ChannelDisconnected _: |
| ChannelState = ChannelState.Disconnected; |
| break; |
| case ChannelReachedEndOfTopic _: |
| ChannelState = ChannelState.ReachedEndOfTopic; |
| break; |
| case ChannelUnsubscribed _: |
| ChannelState = ChannelState.Unsubscribed; |
| break; |
| } |
| |
| CalculateState(); |
| } |
| |
| protected abstract void CalculateState(); |
| } |
| } |