예제 #1
0
        protected void AcceptRequest(Request request, IPort port)
        {
            _Logger.WriteToLog("-> ATS process");
            _Logger.WriteToLog(ObjectToLogString.ToLogString(request));

            port.IncomingRequest(request);
        }
예제 #2
0
        public void OutgoingRequest(object sender, Request request)
        {
            _State = PortState.Busy;

            _Logger.WriteToLog("-> Port on number " + (sender as ITerminal).Number.GetValue + " change state in " + _State);

            OnOutgoingRequest(this, request);
        }
예제 #3
0
        public void IncomingRequest(Request request)
        {
            _State = PortState.Busy;

            _Logger.WriteToLog("-> Port on number " + request.TargetNumber.GetValue + " change state in " + _State);

            OnIncomingRequest(this, request);
        }
 public static string ToLogString(Request request)
 {
     return String.Format("Request on call from {0} to {1}",
         request.SourceNumber.GetValue, request.TargetNumber.GetValue);
 }
예제 #5
0
 public Response(ResponseState state, Request incomingRequest)
 {
     this.State = state;
     this.IncomingRequest = incomingRequest;
 }
예제 #6
0
        public void Drop()
        {
            if (_ActiveCall != null)
            {
                var request = _ActiveCall;
                _ActiveCall = null;

                SendResponse(request, ResponseState.Reject);
            }
        }
예제 #7
0
 public void ConnectToPort(IPort port)
 {
     this.OnPluging += port.PlugToTerminal;
     port.OnIncomingRequest += (sender, request) => { _ActiveCall = request; };
     port.OnRequestWasCompleted += this.CallWasTerminated;
 }
예제 #8
0
        protected void SendResponse(Request request, ResponseState state)
        {
            if (OnResponse != null)
            {
                var respond = new Response(state, request);

                _Logger.WriteToLog("-> Response on incoming call");
                _Logger.WriteToLog(ObjectToLogString.ToLogString(respond));

                OnResponse(this, respond);
            }
        }
예제 #9
0
        protected void CallWasTerminated(object sender, Response respond)
        {
            _ActiveCall = null;

            _Logger.WriteToLog("-> Call terminate in " + _PhoneNumber.GetValue);
        }
예제 #10
0
 public void UnPlug()
 {
     _IsPlugToPort = false;
     OnUnPluging(this, null);
     _ActiveCall = null;
 }
예제 #11
0
 public void TerminateConnection()
 {
     if (_ActiveCall != null)
     {
         _Logger.WriteToLog("-> Call terminate by " + _PhoneNumber.GetValue);
         OnEndCall(this, new Response(ResponseState.Reject, _ActiveCall));
         _ActiveCall = null;
     }
 }
예제 #12
0
        public void SendRequest(PhoneNumber targetNumber)
        {
            if (OnRequest != null)
            {
                if (_ActiveCall != null)
                {
                    this.TerminateConnection();
                }
                _ActiveCall = new Request(_PhoneNumber, targetNumber);

                _Logger.WriteToLog("-> Send request");
                _Logger.WriteToLog(ObjectToLogString.ToLogString(_ActiveCall));

                OnRequest(this, _ActiveCall);
            }
        }
예제 #13
0
 protected void TerminateAllConnections(object sender, Request request)
 {
     TerminateCall(_ConnectingCalls, new Response(ResponseState.Offline, request), (sender as IPort));
     TerminateCall(_ActiveCalls, new Response(ResponseState.Offline, request), (sender as IPort));
 }
예제 #14
0
        protected void RejectRequest(Request request, ResponseState responseState, IPort port)
        {
            var response = new Response(responseState, request);
            _Logger.WriteToLog("-> ATS reject");
            _Logger.WriteToLog(ObjectToLogString.ToLogString(response));

            CallInfo call = new CallInfo(request.SourceNumber, request.TargetNumber);
            call.StartedAt = LocalDateTime.Now;

            port.CallWasCompleted(response);
            OnTerminateCall(this, call);
        }
예제 #15
0
        protected void ProcessRequest(object sender, Request request)
        {
            var senderPort = _RoutingPorts[request.SourceNumber];
            var targetPort = _RoutingPorts[request.TargetNumber];

            var callInfo = new CallInfo(request.SourceNumber, request.TargetNumber);

            if (OnConnecting != null && !OnConnecting(request.SourceNumber))
            {
                RejectRequest(request, ResponseState.NotEnoughtMoney, senderPort);
            }
            else if (targetPort == null)
            {
                RejectRequest(request, ResponseState.TargetNotExist, senderPort);
            }
            else if (targetPort.GetState == PortState.Busy)
            {
                RejectRequest(request, ResponseState.Busy, senderPort);
            }
            else if (targetPort.GetState == PortState.SwitchedOff)
            {
                RejectRequest(request, ResponseState.Offline, senderPort);
            }
            else
            {
                this._ConnectingCalls.Add(callInfo);
                AcceptRequest(request, targetPort);
            }
        }