コード例 #1
0
ファイル: Commands.cs プロジェクト: arup-group/speckleGSA
        public static async Task <bool> SendInitial(TabCoordinator coordinator, SenderCoordinator gsaSenderCoordinator,
                                                    IProgress <SidSpeckleRecord> streamCreationProgress, IProgress <SidSpeckleRecord> streamDeletionProgress,
                                                    IProgress <MessageEventArgs> loggingProgress, IProgress <string> statusProgress, IProgress <double> percentageProgress)
        {
            GSA.App.Settings.TargetLayer              = coordinator.SenderTab.TargetLayer;
            GSA.App.Settings.StreamSendConfig         = coordinator.SenderTab.StreamContentConfig;
            GSA.App.LocalSettings.Result1DNumPosition = coordinator.SenderTab.AdditionalPositionsFor1dElements; //end points (2) plus additional

            var resultsToSend = coordinator.SenderTab.ResultSettings.ResultSettingItems.Where(rsi => rsi.Selected).ToList();

            if (resultsToSend != null && resultsToSend.Count() > 0 && !string.IsNullOrEmpty(coordinator.SenderTab.LoadCaseList))
            {
                //Prepare the cache for the ability to parse the load case string
                var initialData = GSA.App.Proxy.GetGwaData(GSA.App.LocalCache.KeywordsForLoadCaseExpansion, false);
                for (int i = 0; i < initialData.Count(); i++)
                {
                    var applicationId = (string.IsNullOrEmpty(initialData[i].ApplicationId)) ? null : initialData[i].ApplicationId;
                    GSA.App.Cache.Upsert(
                        initialData[i].Keyword,
                        initialData[i].Index,
                        initialData[i].GwaWithoutSet,
                        streamId: initialData[i].StreamId,
                        applicationId: applicationId,
                        gwaSetCommandType: initialData[i].GwaSetType);
                }

                var resultCases = GSA.App.LocalCache.ExpandLoadCasesAndCombinations(coordinator.SenderTab.LoadCaseList);
                if (resultCases != null && resultCases.Count() > 0)
                {
                    percentageProgress.Report(5);

                    loggingProgress.Report(new MessageEventArgs(MessageIntent.Display, MessageLevel.Information, "Resolved load cases"));

                    GSA.App.Settings.ResultCases = resultCases;
                    GSA.App.Settings.ResultTypes = resultsToSend.Select(rts => rts.ResultType).ToList();

                    if (GSA.App.LocalSettings.SendResults && resultCases.Count() > 0)
                    {
                        GSA.App.LocalProxy.PrepareResults(GSA.App.Settings.ResultTypes, GSA.App.LocalSettings.Result1DNumPosition + 2);

                        loggingProgress.Report(new MessageEventArgs(MessageIntent.Display, MessageLevel.Information, "Extracted results"));
                    }
                }
            }

            coordinator.SenderTab.SetDocumentName(GSA.App.Proxy.GetTitle());

            var messenger = new ProgressMessenger(loggingProgress);

            Func <string, string, SpeckleInterface.IStreamSender> streamSenderCreationFn = ((url, token) => new SpeckleInterface.StreamSender(url, token, messenger));

            gsaSenderCoordinator.Initialize(coordinator.Account.ServerUrl, coordinator.Account.Token, coordinator.SenderTab.SenderSidRecords,
                                            streamSenderCreationFn, loggingProgress, statusProgress, percentageProgress, streamCreationProgress, streamDeletionProgress);

            await gsaSenderCoordinator.Trigger();

            coordinator.WriteStreamInfo();

            return(true);
        }
コード例 #2
0
ファイル: Commands.cs プロジェクト: arup-group/speckleGSA
        public static bool Receive(TabCoordinator coordinator, ReceiverCoordinator gsaReceiverCoordinator, IProgress <SidSpeckleRecord> streamCreationProgress,
                                   IProgress <MessageEventArgs> loggingProgress, IProgress <string> statusProgress, IProgress <double> percentageProgress)
        {
            GSA.App.Settings.TargetLayer             = coordinator.ReceiverTab.TargetLayer;
            GSA.App.Settings.Units                   = UnitEnumToString(coordinator.ReceiverTab.CoincidentNodeUnits);
            GSA.App.Settings.CoincidentNodeAllowance = coordinator.ReceiverTab.CoincidentNodeAllowance;

            var messenger = new ProgressMessenger(loggingProgress);

            coordinator.ReceiverTab.StreamListToSidRecords();

            Func <string, string, SpeckleInterface.IStreamReceiver> streamReceiverCreationFn = ((url, token) => new SpeckleInterface.StreamReceiver(url, token, messenger));

            if (!gsaReceiverCoordinator.Initialize(coordinator.Account.ServerUrl, coordinator.Account.Token, coordinator.ReceiverTab.ReceiverSidRecords,
                                                   streamReceiverCreationFn, loggingProgress, statusProgress, percentageProgress))
            {
                return(false);
            }

            gsaReceiverCoordinator.Trigger(null, null);

            //Unlike for sending, the command itself doesn't dispose of the (receiver) coordinator here, as in the case of continuous mode it needs to persist as it needs
            //a constant web socket connection

            coordinator.WriteStreamInfo();

            return(true);
        }