Exemplo n.º 1
0
 public static Task <ContentViewModel> Reload(string viewState)
 {
     using (var content = StorageServer.Load <Content, ContentViewModel>(viewState, out ViewModel))
     {
         return(content.ViewModelTask <Content, ContentViewModel>());
     }
 }
Exemplo n.º 2
0
 public static Task <CalculatorViewModel> Load(Storage sessionStorage)
 {
     using (var calculator = StorageServer.Load <Calculator, CalculatorViewModel>(null, out CalculatorViewModel, sessionStorage))
     {
         return(calculator.ViewModelTask <Calculator, CalculatorViewModel>());
     }
 }
Exemplo n.º 3
0
        public async System.Threading.Tasks.Task RunAsync()
        {
            Console.WriteLine("CHECK STORAGE");
            if (await context.StorageServers.CountAsync() == 0)
            {
                var newStorage = new StorageServer
                {
                    ServerLoad = "50",
                    Name       = "default",
                    Comments   = "default",
                    IP         = "default",
                    Path       = "default",
                    Size       = "default",
                    Url        = "default"
                };

                await context.StorageServers.AddAsync(newStorage);

                await context.SaveChangesAsync();
            }
            Console.WriteLine("END CHECK STORAGE");


            // await PullHomePageSliderFormTheSourceAsync();



            //  RunProgramForSlideShow();
            //await RunProgramForSeriesAsync();
            //await RunProgramForMoviesAsync();

            await RunProgramForSeriesEpisodeAsync();
        }
Exemplo n.º 4
0
        public void LoadLocalData()
        {
            if (this.InvokeRequired)
            {
                LoadDelegate ld = new LoadDelegate(LoadLocalData);
                this.Invoke(ld);
            }
            else
            {
                CustomerServer.GetCustomerAndRegion(ref _ht_Sender, ref _ht_Receiv, ref _ht_Region);
                FrmParent.ParentForm._AllRegion = RegionServer.GetAllRegion();

                _storage_Scan = StorageServer.GetAllStorageScan();

                _UCSenderInfo         = new UCCustomerInfo(true);
                _UCRecevInfo          = new UCCustomerInfo(false);
                _UCSenderInfo.Parent  = this;
                _UCRecevInfo.Parent   = this;
                _UCSenderInfo.Dock    = DockStyle.None;
                _UCRecevInfo.Dock     = DockStyle.None;
                _UCSenderInfo.Visible = false;
                _UCRecevInfo.Visible  = false;
                _UCSenderInfo.Load();
                _UCRecevInfo.Load();
            }
        }
Exemplo n.º 5
0
 private void InitStorageList()
 {
     Cursor.Current = Cursors.WaitCursor;
     try
     {
         cboStorage.Items.Clear();
         cboStorage.DisplayMember = "remark";
         cboStorage.ValueMember   = "storageName";
         List <ColdStorage> list = StorageServer.GetStorageList(null);
         foreach (ColdStorage item in list)
         {
             item.remark = string.Format("{0} [{1}] {2}", item.storageName, item.storageType == 1 ? "冷库" : "车载", item.driver);
             int index = cboStorage.Items.Add(item);
             if (item.storageName.Replace("[默认]", "") == Common._StorageName)
             {
                 cboStorage.SelectedIndex = index;
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "加载失败", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
     }
     finally {
         Cursor.Current = Cursors.Default;
     }
 }
Exemplo n.º 6
0
 /// <summary>
 /// 更新冷藏载体信息
 /// </summary>
 /// <param name="result">冷藏载体信息</param>
 private static void UpdateStorages(ResultModelOfArrayOfModel_ColdStoraged4FqxSXX result)
 {
     if (result.Code != 0)
     {
         throw new Exception(result.Message);
     }
     try
     {
         string valueStr = GetStoragesStr(result.Data);
         int    count    = StorageServer.UpdateStorages(valueStr);
         string info     = "更新成功:{0}新增{1}条";
         string addInfo  = string.Empty;
         if (count != result.Data.Count())
         {
             addInfo = "删除" + (count - result.Data.Count()).ToString() + "条后";
         }
         RegistSyncEvent(string.Format(info, addInfo, result.Data.Count().ToString()));
         if (result.Data.Where(l => l.StorageNamek__BackingField == Common._StorageName + "[默认]").Count() == 0 && !string.IsNullOrEmpty(Common._StorageName))
         {
             RegistSyncEvent("更新的[冷藏载体]中不包含当前设置的冷藏载体[" + Common._StorageName + "],同步完成后请回到主页设置冷藏载体!");
             Common._StorageName = string.Empty;
             //DictionaryServer.SetPDAInfo(Enum_DicKey.storageName, "");
         }
     }
     catch (Exception ex)
     {
         throw new Exception("更新冷藏载体信息失败:" + ex.Message);
     }
 }
Exemplo n.º 7
0
        public static object HeaderDoc(View <CalculatorViewModel> viewCalculator,
                                       Var <string> page, string idParent) =>
        V(viewCalculator.V.SessionStorage).Map(thisStorage =>
        {
            return(new Template.Header.Main()
                   .IdStorageLink(Id(idParent, StorageLink))
                   .Storage(V(viewCalculator.V.VSessionStorage))
                   .StorageLink(async(el, ev) =>
            {
                // WebSharper compiler doesn't accept switch() here
                if (page.Value == IndexDoc.Single)
                {
                    // Single calculator -> Switch to the triptych page
                    page.Set(IndexDoc.Triptych);
                }
                else if (page.Value == IndexDoc.Triptych)
                {
                    // Change storage globally
                    await StorageServer.SetStorage(thisStorage);

                    // Switch back to the single calculator page
                    page.Set(IndexDoc.Single);
                }
                else
                {
                    throw new Exception(string.Format(          // JS: no NotImplementedException
                                            "Page {0}", page.Value));
                }
            })
                   .Doc());
        });
Exemplo n.º 8
0
 public static Task <CalculatorViewModel> Div(string viewState)
 {
     using (var calculator = StorageServer.Load <Calculator, CalculatorViewModel>(viewState, out CalculatorViewModel))
     {
         calculator.Fsm.Div(calculator.Stack);
         return(calculator.ViewModelTask <Calculator, CalculatorViewModel>());
     }
 }
Exemplo n.º 9
0
 public static Task <CalculatorViewModel> Enter(string viewState, string value)
 {
     using (var calculator = StorageServer.Load <Calculator, CalculatorViewModel>(viewState, out CalculatorViewModel))
     {
         calculator.Fsm.Enter(value);
         return(calculator.ViewModelTask <Calculator, CalculatorViewModel>());
     }
 }
Exemplo n.º 10
0
 public static Task <ContentViewModel> Add(string viewState, string item)
 {
     using (var content = StorageServer.Load <Content, ContentViewModel>(viewState, out ViewModel))
     {
         content.Add(item);
         return(content.ViewModelTask <Content, ContentViewModel>());
     }
 }
Exemplo n.º 11
0
        public static gStorageServer Convert(this StorageServer server)
        {
            if (server == null)
            {
                return(null);
            }

            return(new gStorageServer()
            {
                Address = server.Address,
                Id = server.Id.ToString()
            });
        }
Exemplo n.º 12
0
        public async Task <StorageServerResult> Handle(UpdateStorageServerCommand request, CancellationToken cancellationToken)
        {
            StorageServerResult Result = new StorageServerResult();

            // Check guid is valid
            if (!Guid.TryParse(request.Id, out Guid serverId))
            {
                Result.ErrorContent = new ErrorContent("Invalid server Id.", ErrorOrigin.Client);
                return(Result);
            }
            // Get the server from db
            StorageServer server = await _unitOfWork.StorageServer.FirstOrDefaultAsync(s => s.Id == serverId);

            if (server == null)
            {
                Result.ErrorContent = new ErrorContent("The server with the provided id was not found.", ErrorOrigin.Client);
                return(Result);
            }
            // update the server
            server.Address = request.StorageInfo.Address;
            server.State   = request.StorageInfo.State;

            // Update upload options config
            var writeUploadOptsResult = await _uploadOptsClientProxy.WriteUploadOptions(request.UploadOpts, request.StorageInfo.Address);

            if (writeUploadOptsResult.State != OperationState.Success)
            {
                Result.ErrorContent = new ErrorContent($"Error occured while writing {nameof(UploadOptions)} to server {request.StorageInfo.Address}", ErrorOrigin.Server);
                return(Result);
            }
            // Update hardware config
            var writeHardwareOptsResult = await _hardwareOptsProxy.WriteHardwareOptions(request.HardwareOpts, request.StorageInfo.Address);

            if (writeHardwareOptsResult.State != OperationState.Success)
            {
                Result.ErrorContent = new ErrorContent($"Error occured while writing {nameof(HardwareCheckOptions)} to server {request.StorageInfo.Address}", ErrorOrigin.Server);
                return(Result);
            }

            // everything ok, update the server
            Result = await _unitOfWork.CompleteAsync(Result);

            if (Result.State != OperationState.Success)
            {
                Result.ErrorContent = new ErrorContent("An error occured while saving the record to the database. " + Result.ErrorContent.Message, ErrorOrigin.Server);
                return(Result);
            }
            Result.Server = server;
            return(Result);
        }
Exemplo n.º 13
0
 /// <summary>
 /// 加载载体信息
 /// </summary>
 private void LoadStorageInfo()
 {
     try
     {
         List <ColdStorage> list = StorageServer.GetStorageList(Common._StorageName);
         if (list.Count() == 0)
         {
             throw new Exception("本地数据不存在该冷藏载体!");
         }
         _StorageInfo = list[0];
     }
     catch (Exception ex)
     {
         throw new Exception("加载冷藏载体信息失败:" + ex.Message);
     }
 }
Exemplo n.º 14
0
        public async Task <StorageServerResult> Handle(AddStorageServerCommand request, CancellationToken cancellationToken)
        {
            StorageServerResult Result = new StorageServerResult();
            StorageServer       server = await _unitOfWork.StorageServer.FirstOrDefaultAsync(s => s.Address == request.StorageInfo.Address);

            if (server != null)
            {
                Result.ErrorContent = new ErrorContent("A server with the same address already exists.", ErrorOrigin.Client);
                return(Result);
            }
            // Add the server to db
            StorageServer newServer = new StorageServer()
            {
                Address = request.StorageInfo.Address,
                State   = request.StorageInfo.State
            };

            _unitOfWork.StorageServer.Add(newServer);

            // Update upload options config
            var writeUploadOptsResult = await _uploadOptsClientProxy.WriteUploadOptions(request.UploadOpts, request.StorageInfo.Address);

            if (writeUploadOptsResult.State != OperationState.Success)
            {
                Result.ErrorContent = new ErrorContent($"Error occured while writing {nameof(UploadOptions)} to server {request.StorageInfo.Address}", ErrorOrigin.Server);
                return(Result);
            }
            // Update hardware config
            var writeHardwareOptsResult = await _hardwareOptsProxy.WriteHardwareOptions(request.HardwareOpts, request.StorageInfo.Address);

            if (writeHardwareOptsResult.State != OperationState.Success)
            {
                Result.ErrorContent = new ErrorContent($"Error occured while writing {nameof(HardwareCheckOptions)} to server {request.StorageInfo.Address}", ErrorOrigin.Server);
                return(Result);
            }

            // everything ok, save the new server to db
            Result = await _unitOfWork.CompleteAsync(Result);

            if (Result.State != OperationState.Success)
            {
                Result.ErrorContent = new ErrorContent("An error occured while saving the record to the database. " + Result.ErrorContent.Message, ErrorOrigin.Server);
                return(Result);
            }
            Result.Server = newServer;
            return(Result);
        }
Exemplo n.º 15
0
        public UCMain()
        {
            InitializeComponent();
            Common.ValueChangeEvent += new Common.ValueChangeDelegate(Common_ValueChangeEvent);
            AddControlEvent();
            btnNumber.Text      = _numberTitle;
            btnDestination.Text = _destinationTitle;
            btnStorage.Text     = _storageTitle;
            Thread th = new Thread(InitPDALocalInfo);

            th.IsBackground = true;
            th.Start();
            List <ColdStorage> list = StorageServer.GetStorageList(Common._StorageName);

            if (list.Count() > 0)
            {
                btnNodeScan.Enabled = list[0].storageType == 2;
            }
        }
        public async Task <StorageServerResult> Handle(DeleteStorageServerCommand request, CancellationToken cancellationToken)
        {
            StorageServerResult Result = new StorageServerResult();

            if (!Guid.TryParse(request.ServerId, out Guid serverId))
            {
                Result.ErrorContent = new ErrorContent("The provided id is not valid.", ErrorOrigin.Client);
                return(Result);
            }
            // Get the server from db
            StorageServer server = await _unitOfWork.StorageServer.FirstOrDefaultAsync(s => s.Id == serverId);

            if (server == null)
            {
                Result.ErrorContent = new ErrorContent("The server with the provided id was not found.", ErrorOrigin.Client);
                return(Result);
            }

            // remove from collection
            _unitOfWork.StorageServer.Remove(server);
            // remove files
            IEnumerable <FileItem> files = await _unitOfWork.Files.FindAsync(s => s.StorageServerId == serverId);

            if (files.Any())
            {
                _unitOfWork.Files.RemoveRange(files);
            }

            // everything ok, update the server
            Result = await _unitOfWork.CompleteAsync(Result);

            if (Result.State != OperationState.Success)
            {
                Result.ErrorContent = new ErrorContent("An error occured while saving the record to the database. " + Result.ErrorContent.Message, ErrorOrigin.Server);
                return(Result);
            }
            Result.Server = server;
            return(Result);
        }
Exemplo n.º 17
0
        public StorageClient1 GetStorageClient(string groupName = "group1")
        {
            TrackerServer ts = _trackerClient.getTrackerServer();

            if (ts == null)
            {
                throw new Exception("getConnection return null");
            }
            else
            {
                StorageServer ss = _trackerClient.getStoreStorage(ts, groupName);
                if (ss == null)
                {
                    throw new Exception("getStoreStorage return null");
                }
                else
                {
                    StorageClient1 sc1 = new StorageClient1(ts, ss);
                    return(sc1);
                }
            }
        }
Exemplo n.º 18
0
 private static void UpdateStorageScan(ResultModelOfArrayOfModel_ColdStoraged4FqxSXX result)
 {
     if (result.Code != 0)
     {
         throw new Exception(result.Message);
     }
     try
     {
         string valueStr = GetStorageScanStr(result.Data);
         int    count    = StorageServer.UpdateStorageScan(valueStr);
         string info     = "更新成功:{0}新增{1}条";
         string addInfo  = string.Empty;
         if (count != result.Data.Count())
         {
             addInfo = "删除" + (count - result.Data.Count()).ToString() + "条后";
         }
         RegistSyncEvent(string.Format(info, addInfo, result.Data.Count().ToString()));
     }
     catch (Exception ex)
     {
         throw new Exception("更新冷藏载体[扫描]信息失败:" + ex.Message);
     }
 }
Exemplo n.º 19
0
        public static void ConfigAppCloud(IApplicationBuilder app, Cloud cloud)
        {
            var rpcServer = new StorageServer();

            app.UseRpcServer(cloud, rpcServer, "/rpc");
        }
Exemplo n.º 20
0
 /// <summary>
 /// The Dispose() extension method is called implicitly before the
 /// ViewModel is returned and saves the M object either to the returned
 /// ViewState or implicitly on the server.
 /// </summary>
 /// <typeparam name="M"></typeparam>
 public static void Save <M>(this IStored <M> inst)
     where M : class, IStored <M>, new()
 {
     inst.ViewModel.ViewState = StorageServer.Save <M>(inst.ViewModel);
 }
Exemplo n.º 21
0
        private static void Main()
        {
            ConsoleLogger.Log("[boot step] starting antd");
            var startTime = DateTime.Now;

            ConsoleLogger.Log("[boot step] core procedures");

            #region [    os Rw    ]
            Bash.Execute("mount -o remount,rw /", false);
            Bash.Execute("mount -o remount,rw /mnt/cdrom", false);
            #endregion

            #region [    Remove Limits    ]
            const string limitsFile = "/etc/security/limits.conf";
            if (File.Exists(limitsFile))
            {
                if (!File.ReadAllText(limitsFile).Contains("root - nofile 1024000"))
                {
                    FileWithAcl.AppendAllLines(limitsFile, new[] { "root - nofile 1024000" }, "644", "root", "wheel");
                }
            }
            Bash.Execute("ulimit -n 1024000", false);
            #endregion

            #region [    Overlay Watcher    ]
            if (Directory.Exists(Parameter.Overlay))
            {
                new OverlayWatcher().StartWatching();
                ConsoleLogger.Log("overlay watcher ready");
            }
            #endregion

            #region [    Working Directories    ]
            Directory.CreateDirectory(Parameter.AntdCfg);
            Directory.CreateDirectory(Parameter.AntdCfgServices);
            Directory.CreateDirectory(Parameter.AntdCfgNetwork);
            Network2Configuration.CreateWorkingDirectories();
            Directory.CreateDirectory(Parameter.AntdCfgParameters);
            Directory.CreateDirectory(Parameter.AntdCfgCluster);
            Directory.CreateDirectory($"{Parameter.AntdCfgServices}/acls");
            Directory.CreateDirectory($"{Parameter.AntdCfgServices}/acls/template");
            Directory.CreateDirectory(Parameter.RepoConfig);
            Directory.CreateDirectory(Parameter.RepoDirs);
            Directory.CreateDirectory(Parameter.AnthillaUnits);
            Directory.CreateDirectory(Parameter.TimerUnits);
            Directory.CreateDirectory(Parameter.AntdCfgVfs);
            Directory.CreateDirectory(Parameter.AntdCfgRssdp);
            ConsoleLogger.Log("working directories created");
            MountManagement.WorkingDirectories();
            ConsoleLogger.Log("working directories mounted");
            #endregion

            #region [    Mounts    ]
            if (MountHelper.IsAlreadyMounted("/mnt/cdrom/Kernel/active-firmware", "/lib64/firmware") == false)
            {
                Bash.Execute("mount /mnt/cdrom/Kernel/active-firmware /lib64/firmware", false);
            }
            var kernelRelease = Bash.Execute("uname -r").Trim();
            var linkedRelease = Bash.Execute("file /mnt/cdrom/Kernel/active-modules").Trim();
            if (MountHelper.IsAlreadyMounted("/mnt/cdrom/Kernel/active-modules") == false &&
                linkedRelease.Contains(kernelRelease))
            {
                var moduleDir = $"/lib64/modules/{kernelRelease}/";
                DirectoryWithAcl.CreateDirectory(moduleDir);
                Bash.Execute($"mount /mnt/cdrom/Kernel/active-modules {moduleDir}", false);
            }
            Bash.Execute("systemctl restart systemd-modules-load.service", false);
            MountManagement.AllDirectories();
            ConsoleLogger.Log("mounts ready");
            #endregion

            #region [    Check Units Location    ]
            var anthillaUnits = Directory.EnumerateFiles(Parameter.AnthillaUnits, "*.*", SearchOption.TopDirectoryOnly);
            if (!anthillaUnits.Any())
            {
                var antdUnits = Directory.EnumerateFiles(Parameter.AntdUnits, "*.*", SearchOption.TopDirectoryOnly);
                foreach (var unit in antdUnits)
                {
                    var trueUnit = unit.Replace(Parameter.AntdUnits, Parameter.AnthillaUnits);
                    if (!File.Exists(trueUnit))
                    {
                        File.Copy(unit, trueUnit);
                    }
                    File.Delete(unit);
                    Bash.Execute($"ln -s {trueUnit} {unit}");
                }
                var appsUnits = Directory.EnumerateFiles(Parameter.AppsUnits, "*.*", SearchOption.TopDirectoryOnly);
                foreach (var unit in appsUnits)
                {
                    var trueUnit = unit.Replace(Parameter.AntdUnits, Parameter.AnthillaUnits);
                    if (!File.Exists(trueUnit))
                    {
                        File.Copy(unit, trueUnit);
                    }
                    File.Delete(unit);
                    Bash.Execute($"ln -s {trueUnit} {unit}");
                }
                var applicativeUnits = Directory.EnumerateFiles(Parameter.ApplicativeUnits, "*.*", SearchOption.TopDirectoryOnly);
                foreach (var unit in applicativeUnits)
                {
                    var trueUnit = unit.Replace(Parameter.AntdUnits, Parameter.AnthillaUnits);
                    if (!File.Exists(trueUnit))
                    {
                        File.Copy(unit, trueUnit);
                    }
                    File.Delete(unit);
                    Bash.Execute($"ln -s {trueUnit} {unit}");
                }
            }
            anthillaUnits = Directory.EnumerateFiles(Parameter.AnthillaUnits, "*.*", SearchOption.TopDirectoryOnly).ToList();
            if (!anthillaUnits.Any())
            {
                foreach (var unit in anthillaUnits)
                {
                    Bash.Execute($"chown root:wheel {unit}");
                    Bash.Execute($"chmod 644 {unit}");
                }
            }
            ConsoleLogger.Log("[check] units integrity");
            #endregion

            #region [    Application Keys    ]
            var ak  = new AsymmetricKeys(Parameter.AntdCfgKeys, KeyName);
            var pub = ak.PublicKey;
            #endregion

            #region [    Secret    ]
            if (!File.Exists(Parameter.AntdCfgSecret))
            {
                FileWithAcl.WriteAllText(Parameter.AntdCfgSecret, Secret.Gen(), "644", "root", "wheel");
            }

            if (string.IsNullOrEmpty(File.ReadAllText(Parameter.AntdCfgSecret)))
            {
                FileWithAcl.WriteAllText(Parameter.AntdCfgSecret, Secret.Gen(), "644", "root", "wheel");
            }
            #endregion

            #region [    License Management    ]
            var appconfig = new AppConfiguration().Get();
            ConsoleLogger.Log($"[cloud] {appconfig.CloudAddress}");
            try {
                var machineIds = Machine.MachineIds.Get;
                ConsoleLogger.Log($"[machineid] {machineIds.PartNumber}");
                ConsoleLogger.Log($"[machineid] {machineIds.SerialNumber}");
                ConsoleLogger.Log($"[machineid] {machineIds.MachineUid}");
                var licenseManagement = new LicenseManagement();
                licenseManagement.Download("Antd", machineIds, pub);
                var licenseStatus = licenseManagement.Check("Antd", machineIds, pub);
                ConsoleLogger.Log(licenseStatus == null
                    ? "[license] license results null"
                    : $"[license] {licenseStatus.Status} - {licenseStatus.Message}");
            }
            catch (Exception ex) {
                ConsoleLogger.Warn(ex.Message);
            }
            #endregion

            #region [    JournalD    ]
            if (JournaldConfiguration.IsActive())
            {
                JournaldConfiguration.Set();
            }
            #endregion

            #region [    Import Existing Configuration    ]

            Network2Configuration.SetWorkingDirectories();

            #region import host2model
            var tmpHost  = HostConfiguration.Host;
            var varsFile = Host2Configuration.FilePath;
            var vars     = new Host2Model {
                HostName              = tmpHost.HostName.StoredValues.FirstOrDefault().Value,
                HostChassis           = tmpHost.HostChassis.StoredValues.FirstOrDefault().Value,
                HostDeployment        = tmpHost.HostDeployment.StoredValues.FirstOrDefault().Value,
                HostLocation          = tmpHost.HostLocation.StoredValues.FirstOrDefault().Value,
                InternalDomainPrimary = tmpHost.InternalDomain,
                ExternalDomainPrimary = tmpHost.ExternalDomain,
                InternalHostIpPrimary = "",
                ExternalHostIpPrimary = "",
                Timezone              = tmpHost.Timezone.StoredValues.FirstOrDefault().Value,
                NtpdateServer         = tmpHost.NtpdateServer.StoredValues.FirstOrDefault().Value,
                MachineUid            = Machine.MachineIds.Get.MachineUid,
                Cloud = Parameter.Cloud
            };

            if (File.Exists(HostConfiguration.FilePath))
            {
                if (!File.Exists(varsFile))
                {
                    ConsoleLogger.Log("[data import] host configuration");
                    Host2Configuration.Export(vars);
                }
                else
                {
                    if (string.IsNullOrEmpty(File.ReadAllText(varsFile)))
                    {
                        ConsoleLogger.Log("[data import] host configuration");
                        Host2Configuration.Export(vars);
                    }
                }
            }
            #endregion

            #region import network2model
            var tmpNet   = NetworkConfiguration.Get();
            var tmpHost2 = Host2Configuration.Host;
            var niflist  = new List <NetworkInterface>();
            foreach (var cif in tmpNet.Interfaces)
            {
                ConsoleLogger.Log($"[data import] network configuration for '{cif.Interface}'");
                var broadcast = "";
                try {
                    broadcast = Cidr.CalcNetwork(cif.StaticAddress, cif.StaticRange).Broadcast.ToString();
                }
                catch (Exception ex) {
                    ConsoleLogger.Error($"[data import] {ex.Message}");
                }
                var hostname             = $"{vars.HostName}{NetworkInterfaceType.Internal}.{vars.InternalDomainPrimary}";
                var subnet               = tmpHost2.InternalNetPrimaryBits;
                var index                = Network2Configuration.InterfaceConfigurationList.Count(_ => _.Type == NetworkInterfaceType.Internal);
                var networkConfiguration = new NetworkInterfaceConfiguration {
                    Id          = cif.Interface + cif.Guid.Substring(0, 8),
                    Adapter     = cif.Type,
                    Alias       = "import " + cif.Interface,
                    Ip          = cif.StaticAddress,
                    Subnet      = subnet,
                    Mode        = cif.Mode,
                    ChildrenIf  = cif.InterfaceList,
                    Broadcast   = broadcast,
                    Type        = NetworkInterfaceType.Internal,
                    Hostname    = hostname,
                    Index       = index,
                    Description = "import " + cif.Interface,
                    RoleVerb    = NetworkRoleVerb.iif
                };

                var tryget = Network2Configuration.InterfaceConfigurationList.FirstOrDefault(_ => _.Id == networkConfiguration.Id);
                if (tryget == null)
                {
                    Network2Configuration.AddInterfaceConfiguration(networkConfiguration);
                }

                var ifConfig = new NetworkInterface {
                    Device                   = cif.Interface,
                    Configuration            = networkConfiguration.Id,
                    AdditionalConfigurations = new List <string>(),
                    GatewayConfiguration     = ""
                };

                var tryget2 = Network2Configuration.Conf.Interfaces.FirstOrDefault(_ => _.Device == cif.Interface);
                if (tryget2 == null)
                {
                    niflist.Add(ifConfig);
                }
            }
            if (niflist.Any())
            {
                Network2Configuration.SaveInterfaceSetting(niflist);
            }
            if (!Network2Configuration.GatewayConfigurationList.Any())
            {
                var defaultGatewayConfiguration = new NetworkGatewayConfiguration {
                    Id             = Random.ShortGuid(),
                    IsDefault      = true,
                    GatewayAddress = vars.InternalHostIpPrimary,
                    Description    = "DFGW"
                };
                Network2Configuration.AddGatewayConfiguration(defaultGatewayConfiguration);
            }
            #endregion

            #region import parameters
            if (!File.Exists($"{Parameter.AntdCfgParameters}/endcommands.conf"))
            {
                var tmpsetup = SetupConfiguration.Get();
                HostParametersConfiguration.SetEndCommandsList(tmpsetup);
            }
            if (!File.Exists($"{Parameter.AntdCfgParameters}/modprobes.conf"))
            {
                var ddd = EnumerableExtensions.Merge(tmpHost.Modprobes.Select(_ => _.StoredValues.Select(___ => ___.Value)));
                HostParametersConfiguration.SetModprobesList(ddd.ToList());
            }
            if (!File.Exists($"{Parameter.AntdCfgParameters}/rmmod.conf"))
            {
                var ddd = tmpHost.RemoveModules.StoredValues.FirstOrDefault().Value.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                HostParametersConfiguration.SetRmmodList(ddd.ToList());
            }
            if (!File.Exists($"{Parameter.AntdCfgParameters}/modulesblacklist.conf"))
            {
                var ddd = tmpHost.ModulesBlacklist;
                HostParametersConfiguration.SetModulesBlacklistList(ddd.ToList());
            }
            if (!File.Exists($"{Parameter.AntdCfgParameters}/osparameters.conf"))
            {
                var list = new List <string> {
                    "/proc/sys/fs/file-max 1024000",
                    "/proc/sys/net/bridge/bridge-nf-call-arptables 0",
                    "/proc/sys/net/bridge/bridge-nf-call-ip6tables 0",
                    "/proc/sys/net/bridge/bridge-nf-call-iptables 0",
                    "/proc/sys/net/bridge/bridge-nf-filter-pppoe-tagged 0",
                    "/proc/sys/net/bridge/bridge-nf-filter-vlan-tagged 0",
                    "/proc/sys/net/core/netdev_max_backlog 300000",
                    "/proc/sys/net/core/optmem_max 40960",
                    "/proc/sys/net/core/rmem_max 268435456",
                    "/proc/sys/net/core/somaxconn 65536",
                    "/proc/sys/net/core/wmem_max 268435456",
                    "/proc/sys/net/ipv4/conf/all/accept_local 1",
                    "/proc/sys/net/ipv4/conf/all/accept_redirects 1",
                    "/proc/sys/net/ipv4/conf/all/accept_source_route 1",
                    "/proc/sys/net/ipv4/conf/all/rp_filter 0",
                    "/proc/sys/net/ipv4/conf/all/forwarding 1",
                    "/proc/sys/net/ipv4/conf/default/rp_filter 0",
                    "/proc/sys/net/ipv4/ip_forward 1",
                    "/proc/sys/net/ipv4/ip_local_port_range 1024 65000",
                    "/proc/sys/net/ipv4/ip_no_pmtu_disc 1",
                    "/proc/sys/net/ipv4/tcp_congestion_control htcp",
                    "/proc/sys/net/ipv4/tcp_fin_timeout 40",
                    "/proc/sys/net/ipv4/tcp_max_syn_backlog 3240000",
                    "/proc/sys/net/ipv4/tcp_max_tw_buckets 1440000",
                    "/proc/sys/net/ipv4/tcp_moderate_rcvbuf 1",
                    "/proc/sys/net/ipv4/tcp_mtu_probing 1",
                    "/proc/sys/net/ipv4/tcp_rmem 4096 87380 134217728",
                    "/proc/sys/net/ipv4/tcp_slow_start_after_idle 1",
                    "/proc/sys/net/ipv4/tcp_tw_recycle 0",
                    "/proc/sys/net/ipv4/tcp_tw_reuse 1",
                    "/proc/sys/net/ipv4/tcp_window_scaling 1",
                    "/proc/sys/net/ipv4/tcp_wmem 4096 65536 134217728",
                    "/proc/sys/net/ipv6/conf/br0/disable_ipv6 1",
                    "/proc/sys/net/ipv6/conf/eth0/disable_ipv6 1",
                    "/proc/sys/net/ipv6/conf/wlan0/disable_ipv6 1",
                    "/proc/sys/vm/swappiness 0"
                };
                HostParametersConfiguration.SetOsParametersList(list);

                ConsoleLogger.Log("[data import] parameters");
            }
            #endregion

            #endregion

            #region [    Adjustments    ]
            new Do().ParametersChangesPre();
            ConsoleLogger.Log("modules, services and os parameters ready");
            #endregion

            ConsoleLogger.Log("[boot step] procedures");

            #region [    Users    ]
            var manageMaster = new ManageMaster();
            manageMaster.Setup();
            UserConfiguration.Import();
            UserConfiguration.Set();
            ConsoleLogger.Log("users config ready");
            #endregion

            #region [    Host Configuration & Name Service    ]
            new Do().HostChanges();
            ConsoleLogger.Log("host configured");
            ConsoleLogger.Log("name service ready");
            #endregion

            #region [    Network    ]
            new Do().NetworkChanges();
            if (File.Exists("/cfg/antd/services/network.conf"))
            {
                File.Delete("/cfg/antd/services/network.conf");
            }
            if (File.Exists("/cfg/antd/services/network.conf.bck"))
            {
                File.Delete("/cfg/antd/services/network.conf.bck");
            }
            ConsoleLogger.Log("network ready");
            #endregion

            #region [    Firewall    ]
            if (FirewallConfiguration.IsActive())
            {
                FirewallConfiguration.Set();
            }
            #endregion

            #region [    Dhcpd    ]
            DhcpdConfiguration.TryImport();
            if (DhcpdConfiguration.IsActive())
            {
                DhcpdConfiguration.Set();
            }
            #endregion

            #region [    Bind    ]
            BindConfiguration.TryImport();
            BindConfiguration.DownloadRootServerHits();
            if (BindConfiguration.IsActive())
            {
                BindConfiguration.Set();
            }
            #endregion

            ConsoleLogger.Log("[boot step] post procedures");

            #region [    Apply Setup Configuration    ]
            new Do().ParametersChangesPost();
            ConsoleLogger.Log("machine configured (apply setup.conf)");
            #endregion

            #region [    Nginx    ]
            NginxConfiguration.TryImport();
            if (NginxConfiguration.IsActive())
            {
                NginxConfiguration.Set();
            }
            #endregion

            #region [    Ssh    ]
            if (SshdConfiguration.IsActive())
            {
                SshdConfiguration.Set();
            }
            DirectoryWithAcl.CreateDirectory(Parameter.RootSsh, "755", "root", "wheel");
            DirectoryWithAcl.CreateDirectory(Parameter.RootSshMntCdrom, "755", "root", "wheel");
            if (!MountHelper.IsAlreadyMounted(Parameter.RootSsh))
            {
                MountManagement.Dir(Parameter.RootSsh);
            }
            var rk = new RootKeys();
            if (rk.Exists == false)
            {
                rk.Create();
            }
            var authorizedKeysConfiguration = new AuthorizedKeysConfiguration();
            var storedKeys = authorizedKeysConfiguration.Get().Keys;
            foreach (var storedKey in storedKeys)
            {
                var home = storedKey.User == "root" ? "/root/.ssh" : $"/home/{storedKey.User}/.ssh";
                var authorizedKeysPath = $"{home}/authorized_keys";
                if (!File.Exists(authorizedKeysPath))
                {
                    File.Create(authorizedKeysPath);
                }
                FileWithAcl.AppendAllLines(authorizedKeysPath, new List <string> {
                    $"{storedKey.KeyValue} {storedKey.RemoteUser}"
                }, "644", "root", "wheel");
                Bash.Execute($"chmod 600 {authorizedKeysPath}");
                Bash.Execute($"chown {storedKey.User}:{storedKey.User} {authorizedKeysPath}");
            }
            ConsoleLogger.Log("ssh ready");
            #endregion

            #region [    Service Discovery    ]
            try {
                ServiceDiscovery.Rssdp.PublishThisDevice();
                ConsoleLogger.Log("[rssdp] published device");
            }
            catch (Exception ex) {
                ConsoleLogger.Log($"[rssdp] {ex.Message}");
            }
            #endregion

            #region [    AntdUI    ]
            UiService.Setup();
            ConsoleLogger.Log("antduisetup");
            #endregion

            ConsoleLogger.Log("[boot step] managed procedures");

            #region [    Samba    ]
            if (SambaConfiguration.IsActive())
            {
                SambaConfiguration.Set();
            }
            #endregion

            #region [    Syslog    ]
            if (SyslogNgConfiguration.IsActive())
            {
                SyslogNgConfiguration.Set();
            }
            #endregion

            #region [    Storage - Zfs   ]
            foreach (var pool in Zpool.ImportList().ToList())
            {
                if (string.IsNullOrEmpty(pool))
                {
                    continue;
                }
                ConsoleLogger.Log($"pool {pool} imported");
                Zpool.Import(pool);
            }
            ConsoleLogger.Log("storage ready");
            #endregion

            #region [    Scheduler    ]
            Timers.MoveExistingTimers();
            Timers.Setup();
            Timers.Import();
            Timers.Export();
            foreach (var zp in Zpool.List())
            {
                Timers.Create(zp.Name.ToLower() + "snap", "hourly", $"/sbin/zfs snap -r {zp.Name}@${{TTDATE}}");
            }
            Timers.StartAll();
            new SnapshotCleanup().Start(new TimeSpan(2, 00, 00));
            new SyncTime().Start(new TimeSpan(0, 42, 00));
            new RemoveUnusedModules().Start(new TimeSpan(2, 15, 00));

            JobManager jobManager = new JobManager();
            jobManager.ExecuteAllJobs();

            ConsoleLogger.Log("scheduled events ready");
            #endregion

            #region [    Acl    ]
            if (AclConfiguration.IsActive())
            {
                AclConfiguration.Set();
                AclConfiguration.ScriptSetup();
            }
            #endregion

            #region [    C A    ]
            if (CaConfiguration.IsActive())
            {
                CaConfiguration.Set();
            }
            #endregion

            #region [    Host Init    ]
            var app  = new AppConfiguration().Get();
            var port = app.AntdPort;
            var uri  = $"http://localhost:{app.AntdPort}/";
            var host = new NancyHost(new Uri(uri));
            host.Start();
            ConsoleLogger.Log("host ready");
            StaticConfiguration.DisableErrorTraces = false;
            ConsoleLogger.Log($"http port: {port}");
            ConsoleLogger.Log("[boot step] antd is running");
            #endregion

            ConsoleLogger.Log("[boot step] working procedures");

            #region [    Apps    ]
            AppTarget.Setup();
            var apps = AppsConfiguration.Get().Apps;
            foreach (var mapp in apps)
            {
                var units = mapp.UnitLauncher;
                foreach (var unit in units)
                {
                    if (Systemctl.IsActive(unit) == false)
                    {
                        Systemctl.Restart(unit);
                    }
                }
            }
            //AppTarget.StartAll();
            ConsoleLogger.Log("apps ready");
            #endregion

            #region [    Sync / Gluster   ]
            if (GlusterConfiguration.IsActive())
            {
                GlusterConfiguration.Launch();
            }
            if (RsyncConfiguration.IsActive())
            {
                RsyncConfiguration.Set();
            }
            #endregion

            #region [    Storage Server    ]
            VfsConfiguration.SetDefaults();
            new Thread(() => {
                try {
                    var srv = new StorageServer(VfsConfiguration.GetSystemConfiguration());
                    srv.Start();
                }
                catch (Exception ex) {
                    ConsoleLogger.Error(ex.Message);
                }
            }).Start();
            #endregion

            #region [    Tor    ]
            if (TorConfiguration.IsActive())
            {
                TorConfiguration.Start();
            }
            #endregion

            #region [    Cluster    ]
            VfsWatcher = new VfsWatcher();
            ClusterConfiguration.Prepare();
            new Do().ClusterChanges();
            ConsoleLogger.Log("[cluster] active");
            #endregion

            #region [    Directory Watchers    ]
            DirectoryWatcherCluster.Start();
            DirectoryWatcherRsync.Start();
            #endregion

            #region [    Check Application File Acls    ]
            var files = Directory.EnumerateFiles(Parameter.RepoApps, "*.squashfs.xz", SearchOption.AllDirectories);
            foreach (var file in files)
            {
                Bash.Execute($"chmod 644 {file}");
                Bash.Execute($"chown root:wheel {file}");
            }
            ConsoleLogger.Log("[check] app-file acl");
            #endregion

            #region [    Check System Components    ]
            MachineInfo.CheckSystemComponents();
            ConsoleLogger.Log("[check] system components health");
            #endregion

            #region [    Test    ]
#if DEBUG
            Test();
#endif
            #endregion

            ConsoleLogger.Log($"loaded in: {DateTime.Now - startTime}");
            KeepAlive();
            ConsoleLogger.Log("antd is closing");
            host.Stop();
            Console.WriteLine("host shutdown");
        }
Exemplo n.º 22
0
        public static void Run(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("Error: Must have 2 parameters, one is config filename, "
                                  + "the other is the local filename to upload");
                return;
            }

            string conf_filename  = args[0];
            string local_filename = args[1];

            try
            {
                ClientGlobal.init(conf_filename);

                long          startTime;
                ServerInfo[]  servers;
                TrackerClient tracker       = new TrackerClient();
                TrackerServer trackerServer = tracker.getConnection();

                StorageServer storageServer = null;

                StorageClientEx client = new StorageClientEx(trackerServer, storageServer);
                byte[]          file_buff;
                NameValuePair[] meta_list;
                string          group_name;
                string          appender_file_id;
                string          file_ext_name;
                int             errno;

                meta_list    = new NameValuePair[4];
                meta_list[0] = new NameValuePair("width", "800");
                meta_list[1] = new NameValuePair("heigth", "600");
                meta_list[2] = new NameValuePair("bgcolor", "#FFFFFF");
                meta_list[3] = new NameValuePair("author", "Mike");

                file_buff = Encoding.GetEncoding(ClientGlobal.g_charset).GetBytes("this is a test");
                Console.WriteLine("file length: " + file_buff.Length);

                group_name = null;
                StorageServer[] storageServers = tracker.getStoreStorages(trackerServer, group_name);
                if (storageServers == null)
                {
                    Console.WriteLine("get store storage servers fail, error code: " + tracker.ErrorCode);
                }
                else
                {
                    Console.WriteLine("store storage servers count: " + storageServers.Length);
                    for (int k = 0; k < storageServers.Length; k++)
                    {
                        Console.WriteLine((k + 1) + ". " + storageServers[k].InetSockAddr.Address + ":" + storageServers[k].InetSockAddr.Port);
                    }
                    Console.WriteLine("");
                }

                Stopwatch sw = new Stopwatch();
                sw.Start();
                appender_file_id = client.upload_appender_file1(file_buff, "txt", meta_list);
                sw.Stop();
                Console.WriteLine("upload_appender_file1 time used: " + sw.ElapsedMilliseconds + " ms");

                /*
                 * group_name = "";
                 * appender_file_id = client.upload_appender_file1(group_name, file_buff, "txt", meta_list);
                 */
                if (appender_file_id == null)
                {
                    Console.WriteLine("upload file fail, error code: " + client.ErrorCode);
                    return;
                }
                else
                {
                    Console.WriteLine(client.get_file_info1(appender_file_id));

                    servers = tracker.getFetchStorages1(trackerServer, appender_file_id);
                    if (servers == null)
                    {
                        Console.WriteLine("get storage servers fail, error code: " + tracker.ErrorCode);
                    }
                    else
                    {
                        Console.WriteLine("storage servers count: " + servers.Length);
                        for (int k = 0; k < servers.Length; k++)
                        {
                            Console.WriteLine((k + 1) + ". " + servers[k].Ip_Addr + ":" + servers[k].Port);
                        }
                        Console.WriteLine("");
                    }

                    meta_list    = new NameValuePair[4];
                    meta_list[0] = new NameValuePair("width", "1024");
                    meta_list[1] = new NameValuePair("heigth", "768");
                    meta_list[2] = new NameValuePair("bgcolor", "#000000");
                    meta_list[3] = new NameValuePair("title", "Untitle");

                    sw.Restart();
                    errno = client.set_metadata1(appender_file_id, meta_list, ProtoCommon.STORAGE_SET_METADATA_FLAG_MERGE);
                    sw.Stop();
                    Console.WriteLine("set_metadata time used: " + sw.ElapsedMilliseconds + " ms");
                    if (errno == 0)
                    {
                        Console.WriteLine("set_metadata success");
                    }
                    else
                    {
                        Console.WriteLine("set_metadata fail, error no: " + errno);
                    }

                    meta_list = client.get_metadata1(appender_file_id);
                    if (meta_list != null)
                    {
                        for (int i = 0; i < meta_list.Length; i++)
                        {
                            Console.WriteLine(meta_list[i]._Name + " " + meta_list[i]._Value);
                        }
                    }

                    sw.Restart();
                    file_buff = client.download_file1(appender_file_id);
                    sw.Stop();
                    Console.WriteLine("download_file time used: " + sw.ElapsedMilliseconds + " ms");

                    if (file_buff != null)
                    {
                        Console.WriteLine("file length:" + file_buff.Length);
                        Console.WriteLine(Encoding.GetEncoding(ClientGlobal.g_charset).GetString(file_buff));
                    }

                    file_buff     = Encoding.GetEncoding(ClientGlobal.g_charset).GetBytes("this is a slave buff");
                    file_ext_name = "txt";
                    sw.Restart();
                    errno = client.append_file1(appender_file_id, file_buff);
                    sw.Stop();
                    Console.WriteLine("append_file time used: " + sw.ElapsedMilliseconds + " ms");
                    if (errno == 0)
                    {
                        Console.WriteLine(client.get_file_info1(appender_file_id));
                    }
                    else
                    {
                        Console.WriteLine("append file fail, error no: " + errno);
                    }

                    sw.Restart();
                    errno = client.delete_file1(appender_file_id);
                    sw.Stop();
                    Console.WriteLine("delete_file time used: " + sw.ElapsedMilliseconds + " ms");
                    if (errno == 0)
                    {
                        Console.WriteLine("Delete file success");
                    }
                    else
                    {
                        Console.WriteLine("Delete file fail, error no: " + errno);
                    }
                }

                appender_file_id = client.upload_appender_file1(local_filename, null, meta_list);
                if (appender_file_id != null)
                {
                    int        ts;
                    string     token;
                    string     file_url;
                    IPEndPoint inetSockAddr;

                    inetSockAddr = trackerServer.InetSockAddr;
                    file_url     = "http://" + inetSockAddr.Address;
                    if (ClientGlobal.g_tracker_http_port != 80)
                    {
                        file_url += ":" + ClientGlobal.g_tracker_http_port;
                    }
                    file_url += "/" + appender_file_id;
                    if (ClientGlobal.g_anti_steal_token)
                    {
                        ts        = (int)ProtoCommon.DateTimeToUnixTimestamp(DateTime.Now);
                        token     = ProtoCommon.getToken(appender_file_id, ts, ClientGlobal.g_secret_key);
                        file_url += "?token=" + token + "&ts=" + ts;
                    }

                    Console.WriteLine(client.get_file_info1(appender_file_id));
                    Console.WriteLine("file url: " + file_url);

                    errno = client.download_file1(appender_file_id, 0, 0, "c:\\" + appender_file_id.Replace("/", "_"));
                    if (errno == 0)
                    {
                        Console.WriteLine("Download file success");
                    }
                    else
                    {
                        Console.WriteLine("Download file fail, error no: " + errno);
                    }

                    errno = client.download_file1(appender_file_id, 0, 0, new DownloadFileWriter("c:\\" + appender_file_id.Replace("/", "-")));
                    if (errno == 0)
                    {
                        Console.WriteLine("Download file success");
                    }
                    else
                    {
                        Console.WriteLine("Download file fail, error no: " + errno);
                    }

                    file_ext_name = null;
                    sw.Restart();
                    errno = client.append_file1(appender_file_id, local_filename);
                    sw.Stop();
                    Console.WriteLine("append_file time used: " + sw.ElapsedMilliseconds + " ms");
                    if (errno == 0)
                    {
                        Console.WriteLine(client.get_file_info1(appender_file_id));
                    }
                    else
                    {
                        Console.WriteLine("append file fail, error no: " + errno);
                    }
                }

                System.IO.FileInfo f;
                f             = new System.IO.FileInfo(local_filename);
                file_ext_name = Path.GetExtension(local_filename).Trim('.');

                appender_file_id = client.upload_appender_file1(null, f.Length,
                                                                new UploadLocalFileSender(local_filename), file_ext_name, meta_list);
                if (appender_file_id != null)
                {
                    Console.WriteLine(client.get_file_info1(appender_file_id));

                    sw.Restart();
                    errno = client.append_file1(appender_file_id, f.Length, new UploadLocalFileSender(local_filename));
                    sw.Stop();
                    Console.WriteLine("append_file time used: " + sw.ElapsedMilliseconds + " ms");
                    if (errno == 0)
                    {
                        Console.WriteLine(client.get_file_info1(appender_file_id));
                    }
                    else
                    {
                        Console.WriteLine("append file fail, error no: " + errno);
                    }

                    sw.Restart();
                    errno = client.modify_file1(appender_file_id, 0, f.Length, new UploadLocalFileSender(local_filename));
                    sw.Stop();
                    Console.WriteLine("modify_file time used: " + sw.ElapsedMilliseconds + " ms");
                    if (errno == 0)
                    {
                        Console.WriteLine(client.get_file_info1(appender_file_id));
                    }
                    else
                    {
                        Console.WriteLine("modify file fail, error no: " + errno);
                    }

                    sw.Restart();
                    errno = client.truncate_file1(appender_file_id, 0);
                    sw.Stop();
                    Console.WriteLine("truncate_file time used: " + sw.ElapsedMilliseconds + " ms");
                    if (errno == 0)
                    {
                        Console.WriteLine(client.get_file_info1(appender_file_id));
                    }
                    else
                    {
                        Console.WriteLine("truncate file fail, error no: " + errno);
                    }
                }
                else
                {
                    Console.WriteLine("Upload file fail, error no: " + errno);
                }

                storageServer = tracker.getFetchStorage1(trackerServer, appender_file_id);
                if (storageServer == null)
                {
                    Console.WriteLine("getFetchStorage fail, errno code: " + tracker.ErrorCode);
                    return;
                }
                /* for test only */
                Console.WriteLine("active test to storage server: " + ProtoCommon.activeTest(storageServer.getSocket()));

                storageServer.close();

                /* for test only */
                Console.WriteLine("active test to tracker server: " + ProtoCommon.activeTest(trackerServer.getSocket()));

                trackerServer.close();
            }
            catch (Exception ex)
            {
            }
        }
Exemplo n.º 23
0
        /// <summary>
        /// Subpage: The content is built up on the server side, session
        /// persistence is handled either on the client (ViewState) or on the
        /// server (Session/Database).
        /// </summary>
        /// <returns></returns>
        public static WebSharper.UI.Doc WithStorageDoc()
        {
            var storage        = Var.Create(asplib.Model.Storage.ViewState);
            var contentList    = new ListModel <string, string>(s => s);
            var contentTextBox = Var.Create("");

            // Setup the reactive ViewState storage.
            var viewState = Var.Create("");

            return(WebSharper.UI.Doc.ConcatMixed(
                       input(viewState, attr.type("hidden"))
                       ,
                       new Template.Withstorage()
                       .ContentTextBox(contentTextBox)

                       .Back((el, ev) =>
            {
                IndexDoc().RunById("page");
            })

                       // <input ws-var="Storage" value="${ViewState}" type="radio" /> ViewState
                       // in the template yields:
                       // Using ws-var on a <input type="radio"> node is not supported yet, thus programmatic.
                       // Auto-generates the name: <input name="uinref4" type="radio">, manual ids for test.SelectID().
                       .StorageRadio(
                           label(
                               radio(storage, asplib.Model.Storage.ViewState, attr.id("storageViewState")),
                               "ViewState"
                               ),
                           label(
                               radio(storage, asplib.Model.Storage.Session, attr.id("storageSession")),
                               "Session"
                               ),
                           label(
                               radio(storage, asplib.Model.Storage.Database, attr.id("storageDatabase")),
                               "Database"
                               )
                           )
                       .ListContainer(
                           contentList.View.DocSeqCached((string x) =>
                                                         new Template.Withstatic.ListItem().Item(x).Doc()
                                                         )
                           )

                       .ChangeStorage(async(el, ev) =>
            {
                // Set the static storage override globally for the
                // instance, as the concept of SessionStorage makes little
                // sense when it's required to carry it's value along with
                // the single stored Storage object itself.
                await StorageServer.SetStorage(storage.Value);

                // Reload the object from the other storage.
                var newContent = await StorageRemoting.Reload(viewState.Value);

                // Write back the changed model object state
                // to the reactive variable.
                viewState.Value = newContent.ViewState;

                // Update the view according to the model.
                contentList.Set(newContent.Content);
            })
                       .Submit(async(el, ev) =>
            {
                // Retrieve the old stateful object, perform the transition
                // on it with all new input data passed as method arguments
                // in one single step, and immediately save the object in
                // its new state, thus making it effectively immutable from
                // here on.
                var newContent = await StorageRemoting.Add(viewState.Value, contentTextBox.Value);

                // Write back the changed model object state
                // to the reactive variable.
                viewState.Value = newContent.ViewState;

                // Update the view according to the model.
                contentList.Set(newContent.Content);

                // Clear entirely on the client side.
                contentTextBox.Set("");
            })

                       .Doc()
                       ));
        }