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); }
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 } }
/// <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()); } }