public void WriteMaster(string objKey, string objValue)
    {
        var lockRequest = new LockRequest()
        {
            PartitionId = _id,
            ObjectId    = objKey
        };
        var unlockRequest = new UnlockRequest {
            PartitionId = _id,
            ObjectId    = objKey,
            ObjectValue = objValue
        };
        //Very important - order slaves

        IEnumerable <SlaveInfo> orderedSlaves = SlaveServers.OrderBy(s => s.ServerId);

        BaseServerObjectInfo objectInfo;

        lock (Objects) {
            if (!Objects.TryGetValue(objKey, out objectInfo))
            {
                Objects.Add(objKey, objectInfo = new BaseServerObjectInfo("NA"));
            }
        }

        objectInfo._lock.Set();
        objectInfo.Write(objValue);

        foreach (var slave in orderedSlaves)
        {
            try {
                slave.SlaveChannel.lockServer(lockRequest);
            }
            catch (Exception) {
                Console.WriteLine($"Error locking partition {_id} slave {slave.ServerId}");
            }
        }

        foreach (var slave in orderedSlaves)
        {
            try {
                slave.SlaveChannel.unlockServer(unlockRequest);
            }
            catch (Exception) {
                Console.WriteLine($"Error unlocking partition {_id} slave {slave.ServerId}");
            }
        }

        objectInfo._lock.Reset();
    }
Пример #2
0
        private void LoadConfiguration(ModelGeneralInformation ModelConfiguration)
        {
            try
            {
                string CtrlCardPath = XMLFolderPath + ModelConfiguration.ControlCardFileName;
                ControlCardInfomation = XMLSerializeHelper.DeserializeXML <ControlCards>(CtrlCardPath);
                context.ControlCard   = ControlCardInfomation;

                string CameraCfgPath = XMLFolderPath + ModelConfiguration.CameraConfigFileName;
                CameraInfomation          = XMLSerializeHelper.DeserializeXML <SlaveServers>(CameraCfgPath);
                context.SlaveServerConfig = CameraInfomation;

                string  RecipePath       = XMLFolderPath + ModelConfiguration.ModelRecipeFileName;
                Recipes RecipeInfomation = XMLSerializeHelper.DeserializeXML <Recipes>(RecipePath);
                context.ModuleRecipe = RecipeInfomation.RecipeArray;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }