Exemple #1
0
    // ---

    public void UpdateInformation()
    {
        SitelinkReporting sitelink0 = sitelinkPair.pair[0];
        SitelinkReporting sitelink1 = sitelinkPair.pair[1];

        _information = "Sitelink pair:\n" +
                       $"Sites: {sitelink0.local_site}\n<-> {sitelink0.remote_site}\n" +
                       //$"Sitelink IDs: {sitelink0.id}/{sitelink1.id}\n" +
                       $"States: {sitelink0.state}/{sitelink1.state}\n" +
                       //$"Statuses: {sitelink0.status}/{sitelink1.status}\n" +
                       $"In use: {sitelink0.inuse}/{sitelink1.inuse}\n" +
                       $"Sitelink 0 throughput in/out: {sitelink0.throughput_in}/{sitelink0.throughput_out}\n" +
                       $"Sitelink 1 throughput in/out: {sitelink1.throughput_in}/{sitelink1.throughput_out}\n";
    }
Exemple #2
0
    public SitelinkMarker placeSitelinkMarker(SitelinkPair sitelinkPair, Dictionary <SiteId, SiteMarker> siteMarkers)
    {
        SitelinkReporting sitelink0 = sitelinkPair.pair[0];

        SiteMarker fromSite = siteMarkers[sitelink0.local_site];
        SiteMarker toSite   = siteMarkers[sitelink0.remote_site];

        Debug.Log($"Drawing sitelink from {fromSite.site.name} to {toSite.site.name}");

        GameObject     sitelinkMarkerObject = Instantiate(sitelinkMarkerPrefab, Vector3.zero, Quaternion.identity, transform);
        SitelinkMarker sitelinkMarker       = sitelinkMarkerObject.GetComponent <SitelinkMarker>();

        sitelinkMarker.Set(fromSite, toSite, sitelinkPair, transform.position, globeRadius * 1.03f);

        return(sitelinkMarker);
    }
Exemple #3
0
    public void Set(SiteMarker fromSiteMarker, SiteMarker toSiteMarker, SitelinkPair sitelinkPair, Vector3 globePosition, float globeRadius = 0.0f)
    {
        this.fromSiteMarker = fromSiteMarker;
        this.toSiteMarker   = toSiteMarker;
        this.sitelinkPair   = sitelinkPair;

        _stateManager = GameObject.Find("State Manager").GetComponent <StateManager>();
        _lineRenderer = GetComponent <LineRenderer>();

        // TODO: Get these values in a better way, eg. link the globe object here with a public member variable.
        this._globePosition = globePosition;
        this._globeRadius   = globeRadius;

        // ---

        SitelinkReporting sitelink0 = sitelinkPair.pair[0];

        _lineColor          = Color.green;
        _lineWidth          = 0.1f;
        _blinkPeriodSeconds = 0.0f;

        if (sitelink0.state == "up")
        {
            _lineColor = Color.green;

            _lineWidth = 0.05f + sitelink0.throughput_out * 0.01f;
        }
        else
        {
            _lineColor          = Color.red;
            _blinkPeriodSeconds = 2.0f;
        }

        // ---

        Draw();
        UpdateCollider();
        UpdateInformation();
    }
Exemple #4
0
    public void UpdateEntities(bool forceRefresh)
    {
        ClearSiteMarkers();
        ClearSiteLinks();
        _wanManager.DestroyWans();

        var siteMarkersPromise = _dataManager.GetSites(forceRefresh)
                                 .Then(sites => {
            foreach (Site site in sites)
            {
                if (site.coordinates.isValid)
                {
                    if (earthSphere.activeSelf)
                    {
                        currentSiteMarkers.Add(site.id, earthSphere.GetComponent <GlobeSiteCreation>().placeSiteMarker(site, site.coordinates));
                    }
                    else
                    {
                        currentSiteMarkers.Add(site.id, flatMap.GetComponent <FlatSiteCreation>().placeSiteMarker(site, site.coordinates));
                    }
                }
                else
                {
                    Debug.LogWarning($"Coordinates for site {site.id} are not valid, not adding site marker");
                }
            }


            return(currentSiteMarkers);
        });

        var sitelinkMarkersPromise = PromiseHelpers.All(siteMarkersPromise, _dataManager.GetSitelinkPairs(forceRefresh))
                                     .Then(tup => {
            Dictionary <SiteId, SiteMarker> siteMarkers = tup.Item1;
            List <SitelinkPair> sitelinkPairs           = tup.Item2;

            foreach (SitelinkPair sitelinkPair in sitelinkPairs)
            {
                Debug.Log($"Sitelink pair has {sitelinkPair.pair.Count} sitelinks");
                if (sitelinkPair.IsValid())
                {
                    SitelinkReporting sitelink0 = sitelinkPair.pair[0];
                    SitelinkReporting sitelink1 = sitelinkPair.pair[1];

                    Debug.Log($"Sitelink pair {sitelink0.id}/{sitelink1.id} between {sitelink0.local_site} and {sitelink0.remote_site}: first element of pair has status({sitelink0.status}) state({sitelink0.state})");

                    // For now, just use sitelink0 as "the" sitelink. The problem with this is, the order of sitelinks
                    // in a pair is probably not deterministic, so they may swap between refreshes.
                    // TODO: Deal with this somehow, eg. sitelink markers have SitelinkPairs attached, not just a single sitelink.

                    if (siteMarkers.ContainsKey(sitelink0.local_site) && siteMarkers.ContainsKey(sitelink0.remote_site))
                    {
                        if (earthSphere.activeSelf)
                        {
                            _currentSitelinkMarkers.Add(earthSphere.GetComponent <GlobeSiteCreation>().placeSitelinkMarker(sitelinkPair, currentSiteMarkers));
                        }
                        else
                        {
                            _currentSitelinkMarkers.Add(flatMap.GetComponent <FlatSiteCreation>().placeSitelinkMarker(sitelinkPair, currentSiteMarkers));
                        }
                    }
                    else
                    {
                        Debug.LogWarning($"Sitelink between {sitelink0.local_site} and {sitelink0.remote_site} can't be drawn because one or both sitemarkers are missing");
                    }
                }
                else
                {
                    Debug.LogError("A sitelink pair is invalid!");
                }
            }
        })
                                     .Then(() => {
            _wanManager.UpdateWans(forceRefresh);
        })
                                     .Catch(err => Debug.LogError($"Error updating entities: {err.Message}\n{err.StackTrace}"));
    }