protected void AcceptRequest(Request request, IPort port) { _Logger.WriteToLog("-> ATS process"); _Logger.WriteToLog(ObjectToLogString.ToLogString(request)); port.IncomingRequest(request); }
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); }
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); }
public Response(ResponseState state, Request incomingRequest) { this.State = state; this.IncomingRequest = incomingRequest; }
public void Drop() { if (_ActiveCall != null) { var request = _ActiveCall; _ActiveCall = null; SendResponse(request, ResponseState.Reject); } }
public void ConnectToPort(IPort port) { this.OnPluging += port.PlugToTerminal; port.OnIncomingRequest += (sender, request) => { _ActiveCall = request; }; port.OnRequestWasCompleted += this.CallWasTerminated; }
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); } }
protected void CallWasTerminated(object sender, Response respond) { _ActiveCall = null; _Logger.WriteToLog("-> Call terminate in " + _PhoneNumber.GetValue); }
public void UnPlug() { _IsPlugToPort = false; OnUnPluging(this, null); _ActiveCall = null; }
public void TerminateConnection() { if (_ActiveCall != null) { _Logger.WriteToLog("-> Call terminate by " + _PhoneNumber.GetValue); OnEndCall(this, new Response(ResponseState.Reject, _ActiveCall)); _ActiveCall = null; } }
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); } }
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)); }
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); }
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); } }