예제 #1
0
        //-------------------- 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}");
            }
        }
예제 #3
0
        //-------------------------------------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));
                }
            }
        }
예제 #4
0
        //-------------------------------------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));
                }
            }
        }
예제 #5
0
        //-------------------------------------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);
            }
        }
예제 #7
0
        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);
        }