public RemoteConnectionInformation GetCoreInformation(ConnectionProtocol connectionProtocol)
        {
            var information = new RemoteConnectionInformation {
                LocalIpAddress = NetworkUtilities.GetLanIp()
            };

            if ((connectionProtocol & ConnectionProtocol.Tcp) == ConnectionProtocol.Tcp)
            {
                //nothing available currently
            }

            if ((connectionProtocol & ConnectionProtocol.Udp) == ConnectionProtocol.Udp)
            {
                information.UdpConnectionInformation = new UdpConnectionInformation();

                try
                {
                    var ipAddress = NetworkUtilities.GetLanIp();
                    var socket    = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                    socket.Bind(new IPEndPoint(ipAddress, 3478));

                    IPEndPoint ipEndPoint;

                    if (SessionTraversalUtilitiesForNAT.IsHolePunchingPossible(socket, out ipEndPoint))
                    {
                        information.UdpConnectionInformation.IsHolePunchingPossible = true;
                    }
                    socket.Close();
                }
                catch (Exception)
                {
                    // ignored
                }
            }

            return(information);
        }
        public async Task Initialize(ConnectionProtocol connectionProtocol)
        {
            if (_remoteConnectionInformation == null)
            {
                var result =
                    await Task.Run(
                        () =>
                        _dtpFactory.ExecuteFunction <RemoteConnectionInformation>("GetCoreInformation",
                                                                                  connectionProtocol));

                if ((connectionProtocol & (ConnectionProtocol.Tcp | ConnectionProtocol.Udp)) != (ConnectionProtocol.Tcp | ConnectionProtocol.Udp) &&
                    _remoteConnectionInformation != null)
                {
                    if ((connectionProtocol & ConnectionProtocol.Tcp) == ConnectionProtocol.Tcp)
                    {
                        result.UdpConnectionInformation = _remoteConnectionInformation.UdpConnectionInformation;
                    }
                    //else if((connectionProtocol & ConnectionProtocol.Udp) == ConnectionProtocol.Udp)
                    //   result.Tcp = asdasdasd
                }

                _remoteConnectionInformation = result;
            }
        }