public int ProccessTransactionUser(int statusCode, ServerAsyncEventArgs e)
        {
            int action = 0;

            switch (State)
            {
            case Transaction.States.Trying:

                action |= Transaction.Action.SendOutgoingMessage;

                if (statusCode >= 100 && statusCode <= 199)
                {
                    eventArgs = e.CreateDeepCopy();
                    SetState(Transaction.States.Proceeding, ref action);
                }
                else if (statusCode >= 200 && statusCode <= 699)
                {
                    if (e.LocalEndPoint.IsTransportUnreliable())
                    {
                        SetState(Transaction.States.Completed, ref action);
                    }
                    else
                    {
                        SetState(Transaction.States.Terminated, ref action);
                    }
                }

                break;


            case Transaction.States.Proceeding:

                action |= Transaction.Action.SendOutgoingMessage;

                if (statusCode >= 200 && statusCode <= 699)
                {
                    if (e.LocalEndPoint.IsTransportUnreliable())
                    {
                        eventArgs = e.CreateDeepCopy();
                        SetState(Transaction.States.Completed, ref action);
                    }
                    else
                    {
                        SetState(Transaction.States.Terminated, ref action);
                    }
                }
                break;


            case Transaction.States.Completed:
            case Transaction.States.Terminated:
                break;
            }

            return(action);
        }
        public int ProccessTransactionUser(bool isAck, ServerAsyncEventArgs e)
        {
            int action = 0;

            switch (State)
            {
            case Transaction.States.Created:

                action |= Transaction.Action.SendOutgoingMessage;

                if (e.LocalEndPoint.IsTransportUnreliable())
                {
                    eventArgs = e.CreateDeepCopy();
                }

                action |= SetState(Transaction.States.Trying);
                break;

            case Transaction.States.Trying:
            case Transaction.States.Proceeding:
            case Transaction.States.Completed:
            case Transaction.States.Terminated:
                break;
            }

            return(action);
        }
 private void CacheMessage(ServerAsyncEventArgs e)
 {
     if (eventArgs != null)
     {
         eventArgs.Dispose();
     }
     eventArgs = e.CreateDeepCopy();
 }
Пример #4
0
        public int ProccessTransactionUser(bool isAck, ServerAsyncEventArgs e)
        {
            int action = 0;

            switch (State)
            {
            case Transaction.States.Created:

                action |= Transaction.Action.SendOutgoingMessage;

                eventArgs = e.CreateDeepCopy();
                action   |= SetState(Transaction.States.Calling);
                break;

            case Transaction.States.Calling:
            case Transaction.States.Proceeding:
                break;

            case Transaction.States.Completed:
                if (isAck && IsTransportUnreliable)
                {
                    if (eventArgs != null)
                    {
                        eventArgs.Dispose();
                    }
                    eventArgs   = e.CreateDeepCopy();
                    isAckCached = true;
                }
                break;

            case Transaction.States.Terminated:
                break;
            }

            return(action);
        }
 public ServerAsyncEventArgs GetCachedCopy()
 {
     return((eventArgs == null) ? null : eventArgs.CreateDeepCopy());
 }