private void HandlePortCallRequest(object sender, ICallingEventArgs e)
        {
            IPort sourcePort = sender as IPort;

            if (_portMapping.ContainsKey(e.TargetNumber))
            {
                IPort targetPort = _portMapping[e.TargetNumber];

                if (targetPort.State == PortStates.Free)
                {
                    Console.WriteLine("Station: port[{0}] transfer call from terminal {1} to terminal {2}.\n",
                                      sourcePort.PortId, e.SourceNumber, e.TargetNumber);

                    _waitingConnection[sourcePort] = targetPort;
                    targetPort.PortReciveCall(targetPort, e);
                }
                else
                {
                    Console.WriteLine(
                        "Station to port[{0}]: call from terminal {1} to terminal {2} turn dowm. Terminal busy or disconected.\n",
                        sourcePort.PortId, e.SourceNumber, e.TargetNumber);

                    sourcePort.PortReciveReject(sourcePort, e);
                    CreateUnsuccessfulStats(e);
                }
            }
            else
            {
                Console.WriteLine("Station to port[{0}]: invalid target number, or number is not exist.\n",
                                  sourcePort.PortId);

                sourcePort.PortReciveReject(sourcePort, e);
            }
        }
        private void HandleRejectRequestFromSourceTerminal(IPort port, ICallingEventArgs e)
        {
            IPort sourcePort = port;
            IPort targetPort = _onConnection[sourcePort];

            Console.WriteLine(
                "Station: port[{0}] transfer reject from terminal {1} to terminal {2}.\n",
                sourcePort.PortId, e.SourceNumber, e.TargetNumber);

            _onConnection.Remove(sourcePort);
            targetPort.PortReciveReject(targetPort, e);
        }
        private void HandleRejectRequestFromTargetTerminal(IPort port, ICallingEventArgs e)
        {
            IPort sourcePort = _onConnection.FirstOrDefault(x => x.Value == port).Key;
            IPort targetPort = port;

            Console.WriteLine(
                "Station: port[{0}] transfer reject from terminal {2} to terminal {1}.\n",
                targetPort.PortId, e.SourceNumber, e.TargetNumber);

            _onConnection.Remove(sourcePort);
            sourcePort.PortReciveReject(sourcePort, e);
        }
        private void HandleIgnoreRequest(IPort port, ICallingEventArgs e)
        {
            // Ignore request only from 'target' terminal

            IPort targetPort = port;
            IPort sourcePort = _waitingConnection.FirstOrDefault(x => x.Value == port).Key;

            _waitingConnection.Remove(sourcePort);

            Console.WriteLine(
                "Station: port[{0}] transfer reject from terminal {2} to terminal {1}.\n",
                targetPort.PortId, e.SourceNumber, e.TargetNumber);

            sourcePort.PortReciveReject(sourcePort, e);
        }