private void HandleSnpNegotiationResponse(SignallingMessage message)
        {
            var payload = (object[])message.Payload;

            var snpps       = (SubnetworkPointPool[])payload[0];
            var nextPairOut = (SubnetworkPointPortPair)payload[1];
            var pairOut     = new SubnetworkPointPortPair(nextPairOut.SubnetworkPoint, snpps[0].Id);

            if (_clientInSnpps.ContainsKey(message.SourceClientAddress))
            {
                OnUpdateState("[SOURCE_CLIENT_LOCATED]");
                var snppIn = _clientInSnpps[message.SourceClientAddress];
                var linkIn = FindLinkByEnd(snppIn);
                var snpIn  = GenerateSnp(linkIn, message.DemandedCapacity);
                var pairIn = new SubnetworkPointPortPair(snpIn, snppIn.Id);
                InsertRow(new [] { pairIn, pairOut });

                message.Payload = pairIn;
            }
            else
            {
                _recentSnpPortPairs.Add(message.SessionId, pairOut);

                message.Payload = pairOut;
            }


            SendSnpLinkConnectionAllocation(message);
        }
        private void HandleSnpLinkConnectionAllocation(SignallingMessage message)
        {
            var snpps = (SubnetworkPointPool[])message.Payload;

            OnUpdateState($"[RECEIVED_SNPP] {snpps[0]}---{snpps[1]}");

            if (_clientOutSnpps.ContainsKey(message.DestinationClientAddress))
            {
                OnUpdateState("[DESTINATION_CLIENT_LOCATED]");

                var snppOut = snpps[1];
                var linkOut = FindLinkByBegin(snppOut);
                var snpOut  = GenerateSnp(linkOut, message.DemandedCapacity);
                var pairOut = new SubnetworkPointPortPair(snpOut, snppOut.Id);

                _recentSnpPortPairs.Add(message.SessionId, pairOut);

                message.Payload = pairOut;
                SendSnpLinkConnectionAllocation(message);
            }
            else
            {
                SendSnpNegotiation(message);
            }
        }
        private void SendSnpNegotiationResponse(SignallingMessage message, SubnetworkPointPortPair subnetworkPointPortPair)
        {
            message.Payload = new object[]
            { (SubnetworkPointPool[])message.Payload, subnetworkPointPortPair };
            message.DestinationAddress             = message.SourceAddress;
            message.DestinationControlPlaneElement = ControlPlaneElementType.LRM;

            SendMessage(message);
        }
        private void HandleSnpNegotiation(SignallingMessage message)
        {
            var snpps = (SubnetworkPointPool[])message.Payload;

            OnUpdateState($"[RECEIVED_SNPP] {snpps[0]}---{snpps[1]}");

            var pairOut = _recentSnpPortPairs[message.SessionId];

            var linkIn = FindLinkByEnd(snpps[1]);
            var snpIn  = GenerateSnp(linkIn, message.DemandedCapacity);
            var portIn = snpps[1].Id;
            var pairIn = new SubnetworkPointPortPair(snpIn, portIn);

            InsertRow(new [] { pairIn, pairOut });

            SendSnpNegotiationResponse(message, pairIn);
        }