Example #1
0
        public Error?Validate(TagCloudInstruction instruction, TagCloudAnswer answer)
        {
            if (!answer.Tags.Any())
            {
                return(PollError.AnswerValidationFailed("The answer does not contain any tags"));
            }

            if (answer.Tags.Count > instruction.MaxTags)
            {
                return(PollError.AnswerValidationFailed(
                           $"Too many tags submitted (count: {answer.Tags.Count}, max: {instruction.MaxTags})"));
            }

            var groups =
                TagCloudGrouper.GroupAnswers(instruction.Mode, answer.Tags.Select(x => new TagCloudTag("1", x)));

            if (groups.Any(x => x.Count > 1))
            {
                var duplicateTags = groups.Where(x => x.Count > 1).ToList();
                return(PollError.AnswerValidationFailed(
                           $"The answer does contain {duplicateTags.Sum(x => x.Count)} duplicate tags. The following tags are an equal group: {string.Join(", ", duplicateTags.Select(x => "(" + string.Join(", ", x.Select(t => t.Tag)) + ")"))}."));
            }

            return(null);
        }
        public Error?Validate(SingleChoiceInstruction instruction, SingleChoiceAnswer answer)
        {
            if (!instruction.Options.Contains(answer.Selected, StringComparer.Ordinal))
            {
                return(PollError.AnswerValidationFailed("The selected option of the answer does not exist"));
            }

            return(null);
        }
        public Error?Validate(MultipleChoiceInstruction instruction, MultipleChoiceAnswer answer)
        {
            if (answer.Selected.Length == 0)
            {
                return(PollError.AnswerValidationFailed("Answer rejected because no options were selected"));
            }

            if (answer.Selected.Length > instruction.MaxSelections)
            {
                return(PollError.AnswerValidationFailed(
                           $"Multiple choice answer rejected because more options than allowed were selected ({answer.Selected.Length} selected, {instruction.MaxSelections} allowed)"));
            }

            if (answer.Selected.Any(x => !instruction.Options.Contains(x, StringComparer.Ordinal)))
            {
                return(PollError.AnswerValidationFailed(
                           "Multiple choice answer rejected as an invalid option was selected"));
            }

            return(null);
        }
Example #4
0
        public Error?Validate(NumericInstruction instruction, NumericAnswer answer)
        {
            if (instruction.Min > answer.Selected)
            {
                return(PollError.AnswerValidationFailed(
                           $"Answer rejected as the minimum is greater than the answer (min: {instruction.Min}, selected: {answer.Selected})"));
            }

            if (instruction.Max < answer.Selected)
            {
                return(PollError.AnswerValidationFailed(
                           $"Answer rejected as the maximum is smaller than the answer (max: {instruction.Max}, selected: {answer.Selected})"));
            }

            if (instruction.Step != null && answer.Selected % instruction.Step != 0)
            {
                return(PollError.AnswerValidationFailed(
                           $"Answer rejected as it does not match the step (step: {instruction.Step}, selected: {answer.Selected})"));
            }

            return(null);
        }
        private void Device_OnRecivedHandler(Command Packet)
        {
            Console.WriteLine(Packet.ResponseMark);
            if (Packet.ResponseMark.HasValue && _LastType != Packet.ResponseMark.Value)
            {
                _LastType = Packet.ResponseMark.Value;
            }
            else
            {
                return;
            }
            switch (_LastType)
            {
                #region Error
            case PollRecivedPackageType.Dispensed:
            case PollRecivedPackageType.Unloaded:
            case PollRecivedPackageType.InvalidBillNumber:
            case PollRecivedPackageType.InvalidCommand:
            case PollRecivedPackageType.DropCassetteFull:
            case PollRecivedPackageType.DropCassetteRemoved:
            case PollRecivedPackageType.JammedInAcceptor:
            case PollRecivedPackageType.JammedInStacker:
            case PollRecivedPackageType.Cheated:
            case PollRecivedPackageType.GenericErrorCode:
            case PollRecivedPackageType.PowerUpWithBillInValidator:
            case PollRecivedPackageType.PowerUpWithBillInChassis:
                var St2 = new PollError {
                    Device = this, Order = 0, PollResponsed = _LastType, Data = new byte[Packet.ResponsDataLength]
                };
                Array.Copy(Packet.ResponseData, 0, St2.Data, 0, Packet.ResponsDataLength);
                _StepStack.Push(St2);
                _Logger?.LogError(ExportCurrentStepStack().ToString());
                break;

                #endregion
            case PollRecivedPackageType.Initialize:
                _StepStack.Push(new PollInitialize {
                    Device = this, Order = 0, PollResponsed = PollRecivedPackageType.Initialize, Data = null
                });
                break;

            case PollRecivedPackageType.Disabled:
                _StepStack.Push(new PollDisabled()
                {
                    Device = this, Order = 10, PollResponsed = PollRecivedPackageType.Disabled, Data = null
                });
                break;

            case PollRecivedPackageType.Idling:
                _StepStack.Push(new PollIdling()
                {
                    Device = this, Order = 10, PollResponsed = PollRecivedPackageType.Idling, Data = null
                });
                break;

            case PollRecivedPackageType.Accepting:
                _StepStack.Push(new PollAccepting()
                {
                    Device = this, Order = 20, PollResponsed = PollRecivedPackageType.Accepting, Data = null
                });
                break;

                #region Rej
            case PollRecivedPackageType.Rejected_Insertion:
            case PollRecivedPackageType.Rejected_Magnetic:
            case PollRecivedPackageType.Rejected_Bill:
            case PollRecivedPackageType.Rejected_Multiply:
            case PollRecivedPackageType.Rejected_Conveying:
            case PollRecivedPackageType.Rejected_Identification:
            case PollRecivedPackageType.Rejected_Verification:
            case PollRecivedPackageType.Rejected_Optic:
            case PollRecivedPackageType.Rejected_Inhibit:
            case PollRecivedPackageType.Rejected_Capacity:
            case PollRecivedPackageType.Rejected_Operation:
            case PollRecivedPackageType.Rejected_Length:
            case PollRecivedPackageType.Rejected_UV:
            case PollRecivedPackageType.Rejected_Barcode_Unrecognized:
            case PollRecivedPackageType.Rejected_Barcode_IncorrectNum:
            case PollRecivedPackageType.Rejected_Barcode_UnknownStart:
            case PollRecivedPackageType.Rejected_Barcode_UnknownStop:
                _StepStack.Push(new PollRejected()
                {
                    Device = this, Order = 30, PollResponsed = _LastType, Data = null
                });
                break;

                #endregion
            case PollRecivedPackageType.ESCROW:
                _StepStack.Push(new PollESCROW()
                {
                    Device = this, Order = 30, PollResponsed = PollRecivedPackageType.ESCROW, Data = null
                });
                break;

            case PollRecivedPackageType.Stacking:
                _StepStack.Push(new PollStacking()
                {
                    Device = this, Order = 35, PollResponsed = PollRecivedPackageType.Stacking, Data = null
                });
                break;

            case PollRecivedPackageType.PackedOrStacked:
                var St1 = new PollStockedPacked {
                    Device = this, Order = 40, PollResponsed = PollRecivedPackageType.PackedOrStacked, Data = new byte[Packet.ResponsDataLength]
                };
                Array.Copy(Packet.ResponseData, 0, St1.Data, 0, Packet.ResponsDataLength);
                _StepStack.Push(St1);
                break;

            case PollRecivedPackageType.Returning:
                _StepStack.Push(new PollReturnning()
                {
                    Device = this, Order = 40, PollResponsed = PollRecivedPackageType.Returning, Data = null
                });
                break;

            case PollRecivedPackageType.Returned:
                _StepStack.Push(new PollReturned()
                {
                    Device = this, Order = 50, PollResponsed = PollRecivedPackageType.Returned, Data = null
                });
                break;

                #region Ignore
            case PollRecivedPackageType.Holding:

            case PollRecivedPackageType.Busy:

            case PollRecivedPackageType.Dispensing_Recycling2Dispenser:
            case PollRecivedPackageType.Dispensing_WaittingCustomeTake:

            case PollRecivedPackageType.Unloading_Recycling2Drop:
            case PollRecivedPackageType.Unloading_Recycling2Drop_TooMuchBills:

            case PollRecivedPackageType.SettingTypeCassette:
            case PollRecivedPackageType.SettedTypeCassette:

            case PollRecivedPackageType.WaittingOfDecision:
            case PollRecivedPackageType.PowerUp:
            default:
                break;
                #endregion
            }
        }
Example #6
0
        /// <summary>
        /// Handles incoming messages from EBS.
        /// </summary>
        private void EBSOnMessage(object sender, MessageEventArgs e)
        {
            if (!e.IsText)
            {
                return;
            }

            logger.Debug(new LogReceivedMessage {
                Message = e.Data, Session = EBS_SESSION
            }.ToJson());

            string msgType = null;

            try
            {
                var msg = JObject.Parse(e.Data);
                msgType = msg["type"].ToObject <string>();

                switch (msgType)
                {
                case "Authorization.Success":
                    // successful authorization
                    OnAuthorizationSuccess(AuthorizationSuccess.FromJson(e.Data));
                    break;

                case "PollError":
                    // Poll request got canceled
                    var pollError = PollError.FromJson(e.Data);

                    logger.Warn(new LogPollAbortedEBS {
                        Reason = pollError.Reason
                    }.ToJson());

                    pollActive = false;
                    SendMessage(Subscribers, new PollStopped().ToJson());
                    break;

                case "PollResult":
                    // poll results
                    OnPollResult(PollResult.FromJson(e.Data));

                    pollActive = false;
                    SendMessage(Subscribers, new PollStopped().ToJson());
                    break;

                case "PollStarted":
                    // poll successfully started from request
                    pollActive = true;

                    SendMessage(Subscribers, new PollStarted().ToJson());
                    break;

                default:
                    logger.Warn(new LogReceivedUnknownMessageType
                    {
                        MessageType = msgType,
                        Session     = EBS_SESSION
                    }.ToJson());

                    break;
                }
            }
            catch (Exception ex)
            {
                logger.Error(new LogMessageHandlingError
                {
                    Exception   = ex,
                    MessageType = msgType,
                    Session     = EBS_SESSION
                }.ToJson());
            }
        }