//-------------------- Private methods -------------------------------- void savePrevious() { T.LogRbr(LogSeverity.Debug, "DualRepository.savePrevious", "Started"); var _cdrAggregates = repositoryArray[previousIndex].ToArray(); if (_cdrAggregates == null) { throw new Exception("CdrAggrExporter.export | CdrAggregates == null ? "); } T.LogRbr(LogSeverity.Debug, "DualRepository.savePrevious", string.Format("CdrAggregates Length: {0}", _cdrAggregates.Length)); if (_cdrAggregates.Length <= 0) { return; } var _currentNode = new CurrentNode(); if (_currentNode.BelongsToStandalonePlatform) { (new CdrAggregate()).ImportToDb(_cdrAggregates); return; } var _targetNodes = Node.GetNodes(NodeRole.Admin); if (_targetNodes == null || _targetNodes.Length != 1) { T.LogRbr(LogSeverity.Critical, "DualRepository.veprevious", "CdrAggrExport: Admin server doesn't exist"); return; } var _folder = Path.Combine(configuration.Folders.CdrAggrPublishingFolder, _targetNodes[0].UserName); if (!Directory.Exists(_folder)) { Directory.CreateDirectory(_folder); } //-- (1) Create a FULL AND 'temp' file name: var _fileName = _currentNode.Id.ToString("D2") + "-" + DateTime.Now.ToString(AppConstants.CdrAggrFileNameFormat); var _filePath = Path.Combine(_folder, _fileName + AppConstants.CdrAggrFileExtension); if (File.Exists(_filePath)) { T.LogRbr(LogSeverity.Critical, "DualRepository.savePrevious", string.Format("File already exist: {0}", _filePath)); return; } //-- (2) Serialize and save: using (var _fs = new FileStream(_filePath, FileMode.Create)) { var _serializer = new XmlSerializer(typeof(CdrAggregate[])); _serializer.Serialize(_fs, _cdrAggregates); _fs.Flush(); _fs.Close(); } //-- (3) rename (by appending ".pending") FileHelper.AddExtension(_filePath, AppConstants.PendingExtension); }
private void LoadGame() { // list available save files var existingFiles = ShipwreckController.GetExistingSaveFileNames(); if (existingFiles.Count == 0) { Log.Warning("There are no saved games"); ViewHelpers.Continue(); return; } existingFiles.Add("Exit"); var fileToLoad = Prompt.Select("Which game would you like to load?", existingFiles); if (fileToLoad == "Exit") { return; } fileToLoad = FileHelper.AddExtension(fileToLoad, ".json"); // try load file if (ShipwreckController.TryLoadGame(fileToLoad, out var game)) { ShipwreckController.StartGame(game); } else { Log.Error($"Unable to load {fileToLoad}"); } }
//-------------------------------------Private ---------------------------------------------------- void fileConsumingLoop() { TimokLogger.Instance.LogRbr(LogSeverity.Status, "R_Consumer.fileConsumingLoop", string.Format("Consumer={0}, entering fileConsumingLoop", name)); while (!stop) { try { Thread.Sleep(1000); string[] _nodeFiles = Directory.GetFiles(fromFolder, pendingFilesFilter); foreach (string _filePath in _nodeFiles) { if (FileHelper.IsOpen(_filePath, TimokLogger.Instance.LogRbr)) { TimokLogger.Instance.LogRbr(LogSeverity.Error, "R_Consumer.fileConsumingLoop", string.Format("Consumer={0}, IsOpen file: {1}", name, _filePath)); break; } if (!consumerDelegate(_filePath)) { FileHelper.AddExtension(_filePath, AppConstants.ErrorExtension); break; } FileHelper.AddExtension(_filePath, AppConstants.ConsumedExtension); } } catch (Exception _ex) { TimokLogger.Instance.LogRbr(LogSeverity.Critical, "R_Consumer.fileConsumingLoop", string.Format("Consumer={0}, Exception:\r\n{1}", name, _ex)); } } }
//-------------------------------------Private ---------------------------------------------------- void filePublishingLoop() { while (!stop) { try { Thread.Sleep(1000); var _targetServers = (new CurrentNode()).IsAdmin ? Node.GetNodes(new[] { NodeRole.H323, NodeRole.SIP }) : Node.GetNodes(new[] { NodeRole.Admin }); if (_targetServers == null) { TimokLogger.Instance.LogRbr(LogSeverity.Debug, "R_Publisher.filePublishingLoop", "No target servers"); continue; } foreach (var _server in _targetServers) { if (_server.Status != Status.Active) { continue; } var _folder = Path.Combine(fromFolder, _server.UserName); if (!Directory.Exists(_folder)) { Directory.CreateDirectory(_folder); continue; } errorCount = 0; var _nodeFiles = Directory.GetFiles(_folder, pendingFilesFilter); foreach (var _filePath in _nodeFiles) { if (FileHelper.IsOpen(_filePath, TimokLogger.Instance.LogRbr)) { TimokLogger.Instance.LogRbr(LogSeverity.Error, "R_Publisher.filePublishingLoop", string.Format("Publisher={0}, OPEN: {1}", name, _filePath)); break; } while (++errorCount < MAX_ERROR_COUNT) { if (!publisherDelegate(_server, _filePath)) { continue; } FileHelper.AddExtension(_filePath, AppConstants.PublishedExtension); errorCount = 0; break; } } } } catch (Exception _ex) { TimokLogger.Instance.LogRbr(LogSeverity.Critical, "R_Publisher.filePublishingLoop", string.Format("Publisher={0}, Exception:\r\n{1}", name, _ex)); } } }
//-------------------------------------Private ---------------------------------------------------- void filePublishingLoop() { while (true) { try { Thread.Sleep(1000); var _error = false; var _targetNodes = Node.GetNodes(new[] { NodeRole.H323, NodeRole.SIP }); if (_targetNodes == null) { T.LogRbr(LogSeverity.Critical, "RbrExporter.fialPublishingLoop", "No Targets ? RbrExporter"); return; } var _pendingFiles = Directory.GetFiles(configuration.Folders.AuditFolder, pendingFilesFilter); foreach (var _filePath in _pendingFiles) { if (FileHelper.IsOpen(_filePath, T.LogRbr)) { T.LogRbr(LogSeverity.Error, "RbrExporter.filePublishingLoop", string.Format("Error: OPEN: {0}" + _filePath)); break; } //-- copy to all local per Node replication folders foreach (var _node in _targetNodes) { if (!copy(_filePath, _node)) { _error = true; break; } } if (_error) { T.LogRbr(LogSeverity.Error, "RbrExporter.filePublishingLoop", string.Format("Error: COPY: {0}" + _filePath)); break; } FileHelper.AddExtension(_filePath, AppConstants.PublishedExtension); } } catch (Exception _ex) { T.LogRbr(LogSeverity.Critical, "RbrExporter.filePublishingLoop", string.Format("Exception:\r\n{0}", _ex)); } } }
public static bool TrySaveGame(string fileName) { try { if (string.IsNullOrEmpty(fileName)) { return(false); } // validate name & extension fileName = FileHelper.AddExtension(fileName, ".json"); // check for existing file & ask to override var fileExists = FileHelper.FileExists(Shipwreck.Settings.SavePath, fileName); if (fileExists) { var overwrite = ViewHelpers.OverwriteFileName(fileName); // TODO view reports an error when overwrite is false if (!overwrite) { return(false); } } // save filename to game Shipwreck.CurrentGame.SaveFileName = fileName; // write the file var gameString = JsonConvert.SerializeObject(Shipwreck.CurrentGame); var filePath = Path.Combine(Shipwreck.Settings.SavePath, fileName); File.WriteAllText(filePath, gameString); return(true); } catch (Exception ex) { return(false); } }
void saveToFile(DateTime pNow, CDRRow[] pCDRRows) { var _targetNodes = Node.GetNodes(NodeRole.Admin); if (_targetNodes == null || _targetNodes.Length != 1) { T.LogRbr(LogSeverity.Critical, "CdrExporter.saveToFile", "CdrExport: Admin server doesn't exist"); return; } var _folder = Path.Combine(configuration.Folders.CdrPublishingFolder, _targetNodes[0].UserName); if (!Directory.Exists(_folder)) { Directory.CreateDirectory(_folder); } //-- (1) Create a FULL AND 'temp' file name: var _fileName = (new CurrentNode()).Id.ToString("D2") + "-" + pNow.ToString(AppConstants.CdrFileNameFormat); var _filePath = Path.Combine(_folder, _fileName + AppConstants.CdrFileExtension); if (File.Exists(_filePath)) { T.LogRbr(LogSeverity.Critical, "CdrExporter.saveToFile", string.Format("File already exist: {0}", _filePath)); return; } //-- (2) Serialize and save: using (Stream _stream = new FileStream(_filePath, FileMode.Create)) { IFormatter _formatter = new BinaryFormatter(); //SoapFormatter(); _formatter.Serialize(_stream, pCDRRows); _stream.Flush(); _stream.Close(); } //-- (3) rename (by appending ".pending") FileHelper.AddExtension(_filePath, AppConstants.PendingExtension); }