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); }
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); }