示例#1
0
        private void SetCurrentEvent(HistoryEvent historyEvent)
        {
            if (historyEvent is BookmarkHistoryEvent bookmarkHistoryEvent)
            {
                Core core = Core.Create(Core.LatestVersion, bookmarkHistoryEvent.Bookmark.State.GetBytes());
                SetCore(core);

                Display.GetFromBookmark(bookmarkHistoryEvent.Bookmark);

                Auditors?.Invoke(CoreAction.LoadCore(historyEvent.Ticks, bookmarkHistoryEvent.Bookmark.State));
            }
            else if (historyEvent is RootHistoryEvent rootHistoryEvent)
            {
                Core core = Core.Create(Core.LatestVersion, Core.Type.CPC6128);
                SetCore(core);

                Display.GetFromBookmark(null);

                Auditors?.Invoke(CoreAction.Reset(rootHistoryEvent.Ticks));
            }
            else
            {
                throw new Exception("Can't set current event to an event that isn't the root or doesn't have a bookmark.");
            }

            _history.CurrentEvent = historyEvent;
        }
示例#2
0
        public override void LoadSave(object obj)
        {
            AuditorServiceSave save = obj as AuditorServiceSave;

            if (save != null)
            {
                Auditors.Clear();
                save.Validate();
                foreach (var kvp in save.auditors)
                {
                    Dictionary <string, Auditor> generatorAuditors = new Dictionary <string, Auditor>();
                    foreach (var kvp2 in kvp.Value)
                    {
                        generatorAuditors.Add(kvp2.Key, new Auditor(kvp2.Value));
                    }
                    Auditors.Add(kvp.Key, generatorAuditors);
                }
                SpeedMults.Clear();
                SpeedMults.CopyFrom(save.speedMults);
                IsLoaded = true;
            }
            else
            {
                LoadDefaults();
            }
        }
示例#3
0
            /// <summary>
            /// Description  : Get Auditors Details from database.
            /// Created By   : Pavan
            /// Created Date : 23 August 2014
            /// Modified By  :
            /// Modified Date:
            /// </summary>
            /// <returns></returns>
            public static List<Auditors> GetAuditorDetailsByWOID(int WOID)
            {
                var data = new List<Auditors>();

                System.Diagnostics.StackFrame stackFrame = new System.Diagnostics.StackFrame();
                System.Reflection.MethodBase methodBase = stackFrame.GetMethod();
                log.Debug("Start: " + methodBase.Name);
                try
                {
                    SqlParameter[] sqlParams = new SqlParameter[1];
                    sqlParams[0] = new SqlParameter("@WOID", WOID);
                    var reader = SqlHelper.ExecuteReader(ConnectionUtility.GetConnectionString(), CommandType.StoredProcedure, "[SpGetAuditorDetailsByWOID]", sqlParams);
                    var safe = new SafeDataReader(reader);
                    while (reader.Read())
                    {
                        var Auditors = new Auditors();
                        Auditors.FetchAuditors(Auditors, safe);
                        data.Add(Auditors);
                    }
                    return data;
                }
                catch (Exception ex)
                {
                    log.Error("Error: " + ex);
                    return data;
                }
                finally
                {
                    log.Debug("End: " + methodBase.Name);
                }
            }
示例#4
0
 private int GetCountOfActiveAuditors(int generatorId)
 {
     if (Auditors.ContainsKey(generatorId))
     {
         return(Auditors[generatorId].Where(kvp => !kvp.Value.IsCompleted).Count());
     }
     return(0);
 }
示例#5
0
 public Dictionary <string, Auditor> GetAuditors(int generatorId)
 {
     if (!Auditors.ContainsKey(generatorId))
     {
         Auditors.Add(generatorId, new Dictionary <string, Auditor>());
     }
     return(Auditors[generatorId]);
 }
示例#6
0
        public void ReceiveCoreAction(CoreAction coreAction)
        {
            if (_core == null)
            {
                Close();
                return;
            }

            Auditors?.Invoke(coreAction);

            _core.PushRequest(coreAction);
        }
示例#7
0
        public override void AssignResponse(MessageEnvelope envelope)
        {
            try
            {
                var resultMessage = (ResultMessage)envelope.Message;
                if (envelope.Signatures.Count < 1)
                {
                    throw new RequestException(envelope, "Result message has no signatures.");
                }
                if (envelope.Signatures.Distinct().Count() != envelope.Signatures.Count)
                {
                    throw new RequestException(envelope, "Duplicate signatures.");
                }
                if (!envelope.Signatures.Any(s => s.Signer.Equals(AlphaPubkey)))
                {
                    throw new RequestException(envelope, "Result signature was not signed by Alpha.");
                }
                if (!envelope.Signatures.All(s => Auditors.Any(a => s.Signer.Equals(a)) || s.Signer.Equals(AlphaPubkey)))
                {
                    throw new RequestException(envelope, "Unknown signer.");
                }
                if (!(resultMessage is ITransactionResultMessage || envelope.AreSignaturesValid()))//TODO: remove it after ITransactionResultMessage refactoring
                {
                    throw new RequestException(envelope, "At least one signature is invalid.");
                }

                if (envelope.HasMajority(Auditors.Length))
                {
                    if (finalizeSource.Task.IsCompleted)
                    {
                        throw new RequestException(envelope, "Finalize result message was already received.");
                    }
                    if (!acknowledgmentSource.Task.IsCompleted) //complete acknowledgment task if it's not completed yet
                    {
                        AssignResponseToSource(acknowledgmentSource, envelope);
                    }
                    AssignResponseToSource(finalizeSource, envelope);
                }
                else
                {
                    if (acknowledgmentSource.Task.IsCompleted)
                    {
                        throw new RequestException(envelope, "Acknowledgment result message was already received.");
                    }
                    AssignResponseToSource(acknowledgmentSource, envelope);
                }
            }
            catch (Exception exc)
            {
                acknowledgmentSource.TrySetException(exc);
                finalizeSource.TrySetException(exc);
            }
        }
示例#8
0
 private void AddAuditor(Auditor auditor)
 {
     if (Auditors.ContainsKey(auditor.GeneratorId))
     {
         Auditors[auditor.GeneratorId].Add(auditor.Id, auditor);
     }
     else
     {
         Dictionary <string, Auditor> generatorAuditors = new Dictionary <string, Auditor> {
             [auditor.Id] = auditor
         };
         Auditors.Add(auditor.GeneratorId, generatorAuditors);
     }
     auditor.StartAuditor();
     GameEvents.OnAuditorAdded(auditor);
 }
示例#9
0
        public Authority(string tableId, string productCode = null)
        {
            if (productCode.IsNullOrWhiteSpace())
            {
                productCode = Assessment_Type.B.GetDescription();
            }
            var _common = new Controllers.CommonController();

            userAccount = Controllers.AccountController.CurrentUserInfo.Name;
            Presenteds  = _common.getAssessment(productCode, tableId, SetAssessmentType.Presented);
            Auditors    = _common.getAssessment(productCode, tableId, SetAssessmentType.Auditor);
            if (Presenteds.Any(x => x.User_Account == userAccount))
            {
                AuthorityType = Authority_Type.Presented;
            }
            else if (Auditors.Any(x => x.User_Account == userAccount))
            {
                AuthorityType = Authority_Type.Auditor;
            }
            else
            {
                AuthorityType = Authority_Type.None;
            }
        }
示例#10
0
 /// <summary>
 /// Delegate for logging core actions.
 /// </summary>
 /// <param name="core">The core the request was made for.</param>
 /// <param name="request">The original request.</param>
 /// <param name="action">The action taken.</param>
 private void RequestProcessed(Core core, CoreRequest request, CoreAction action)
 {
     Auditors?.Invoke(action);
 }
示例#11
0
        /// <summary>
        /// Delegate for logging core actions.
        /// </summary>
        /// <param name="core">The core the request was made for.</param>
        /// <param name="request">The original request.</param>
        /// <param name="action">The action taken.</param>
        private void RequestProcessed(Core core, CoreRequest request, CoreAction action)
        {
            if (core == _core)
            {
                if (action != null)
                {
                    Auditors?.Invoke(action);

                    if (action.Type != CoreAction.Types.CreateSnapshot &&
                        action.Type != CoreAction.Types.DeleteSnapshot &&
                        action.Type != CoreAction.Types.RevertToSnapshot)
                    {
                        HistoryEvent e = _history.AddCoreAction(action);

                        switch (action.Type)
                        {
                        case CoreRequest.Types.LoadDisc:
                            Status = (action.MediaBuffer.GetBytes() != null) ? "Loaded disc" : "Ejected disc";
                            break;

                        case CoreRequest.Types.LoadTape:
                            Status = (action.MediaBuffer.GetBytes() != null) ? "Loaded tape" : "Ejected tape";
                            break;

                        case CoreRequest.Types.Reset:
                            Status = "Reset";
                            break;
                        }
                    }

                    if (action.Type == CoreAction.Types.RunUntil)
                    {
                        lock (_snapshots)
                        {
                            SnapshotInfo newSnapshot = _snapshots.LastOrDefault();
                            if (newSnapshot != null && action.AudioSamples != null)
                            {
                                newSnapshot.AudioBuffer.Write(action.AudioSamples);
                            }
                        }
                    }
                    else if (action.Type == CoreAction.Types.RevertToSnapshot)
                    {
                        HistoryEvent historyEvent = ((SnapshotInfo)request.UserData).HistoryEvent;
                        if (_history.CurrentEvent != historyEvent)
                        {
                            _history.CurrentEvent = historyEvent;
                        }

                        Display.CopyScreenAsync();
                    }
                    else if (action.Type == CoreAction.Types.CreateSnapshot)
                    {
                        lock (_snapshots)
                        {
                            // Figure out what history event should be set as current if we revert to this snapshot.
                            // If the current event is a RunUntil, it may not be "finalized" yet (i.e. it may still
                            // be updated), so go with its parent.
                            HistoryEvent historyEvent = _history.MostRecentClosedEvent(_history.CurrentEvent);

                            SnapshotInfo newSnapshot = new SnapshotInfo(action.SnapshotId, historyEvent);
                            _snapshots.Add(newSnapshot);

                            while (_snapshots.Count > _snapshotLimit)
                            {
                                SnapshotInfo snapshot = _snapshots[0];
                                _snapshots.RemoveAt(0);
                                _core.PushRequest(CoreRequest.DeleteSnapshot(snapshot.Id));
                            }
                        }
                    }
                }
            }
        }
示例#12
0
 public override void LoadDefaults()
 {
     Auditors.Clear();
     SpeedMults.Clear();
     IsLoaded = true;
 }
示例#13
0
 private Auditors FetchAuditors(Auditors Auditors, SafeDataReader dr)
 {
     Auditors.AuditorID = dr.GetInt32("AuditorID");
     Auditors.AuditorName = dr.GetString("AuditorName");
     return Auditors;
 }
示例#14
0
        private bool ProcessNextRequest()
        {
            bool success = true;

            CoreRequest firstRequest = FirstRequest();
            bool        removeFirst  = true;
            CoreRequest request      = firstRequest;
            CoreAction  action       = null;

            if (request == null)
            {
                removeFirst = false;

                if (IdleRequest != null)
                {
                    request = IdleRequest();
                }

                if (request == null)
                {
                    _requestQueueNonEmpty.WaitOne(20);
                    return(false);
                }
            }

            UInt64 ticks = Ticks;

            switch (request.Type)
            {
            case CoreRequest.Types.KeyPress:
                lock (_lockObject)
                {
                    if (_coreCLR.KeyPress(request.KeyCode, request.KeyDown))
                    {
                        action = CoreAction.KeyPress(ticks, request.KeyCode, request.KeyDown);
                    }
                }
                break;

            case CoreRequest.Types.Reset:
                lock (_lockObject)
                {
                    _coreCLR.Reset();
                }
                action = CoreAction.Reset(ticks);
                break;

            case CoreRequest.Types.LoadDisc:
                lock (_lockObject)
                {
                    _coreCLR.LoadDisc(request.Drive, request.MediaBuffer.GetBytes());
                }
                action = CoreAction.LoadDisc(ticks, request.Drive, request.MediaBuffer);
                break;

            case CoreRequest.Types.LoadTape:
                lock (_lockObject)
                {
                    _coreCLR.LoadTape(request.MediaBuffer.GetBytes());
                }
                action = CoreAction.LoadTape(ticks, request.MediaBuffer);
                break;

            case CoreRequest.Types.RunUntil:
            {
                action = RunForAWhile(request.StopTicks);

                success = (request.StopTicks <= Ticks);
            }
            break;

            case CoreRequest.Types.CoreVersion:
                lock (_lockObject)
                {
                    byte[] state = GetState();

                    ICore newCore = Core.CreateVersionedCore(request.Version);
                    newCore.LoadState(state);
                    newCore.SetScreen(Display.Pitch, Display.Height, Display.Width);

                    _coreCLR.Dispose();
                    _coreCLR = newCore;
                }
                break;

            case CoreRequest.Types.LoadCore:
                lock (_lockObject)
                {
                    _coreCLR.LoadState(request.CoreState.GetBytes());
                }

                action = CoreAction.LoadCore(ticks, request.CoreState);
                break;

            case CoreRequest.Types.CreateSnapshot:
                lock (_lockObject)
                {
                    action = CreateSnapshot(request.SnapshotId);
                }

                break;

            case CoreRequest.Types.DeleteSnapshot:
                lock (_lockObject)
                {
                    action = DeleteSnapshot(request.SnapshotId);
                }

                break;

            case CoreRequest.Types.RevertToSnapshot:
                lock (_lockObject)
                {
                    action = RevertToSnapshot(request.SnapshotId);
                }

                break;

            default:
                Diagnostics.Trace("Unknown core request type {0}. Ignoring request.", request.Type);
                break;
            }

            if (removeFirst && success)
            {
                RemoveFirstRequest();
            }

            Auditors?.Invoke(this, request, action);

            return(false);
        }
 public void updateAuditors(Auditors b)
 {
     ctx.Update(b);
 }
 public void PostAuditors(Auditors a)
 {
     ctx.Insert(a);
 }