ARSImitation.cs 13.7 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using GeneralLib;

namespace SunVoteARSPPT
{
    public class Demo : IResponse
    {
        /// <summary>
        /// 演示模式类
        /// </summary>
        public Imitation DemoMode = null;
        /// <summary>
        /// 要演示的键盘编号
        /// </summary>
        public static string[] Keypads { get; set; }
        public static Dictionary<string, string> PollList { get; set; }
        /// <summary>
        /// 签到码列表
        /// 2012-06-18
        /// </summary>
        public static Dictionary<string, string> SignCodeList { get; set; }
        /// <summary>
        /// 构造函数
        /// </summary>
        public Demo()
        {
            DemoMode = new Imitation();
            DemoMode.KeyIDList = new List<string>();
            DemoMode.Interval = 500;//杨斌 2012-06-27 模拟太快了按键音效太密
            DemoMode.DemoCreat += new DemoCreatEvt(DemoMode_DemoCreat);
        }

        /// <summary>
        /// 演示模式收取数据
        /// </summary>
        /// <param name="Result"></param>
        void DemoMode_DemoCreat(DemoResult Result)
        {
            if (DemoMode.DemoType.GetType().Name == "ChoiceDemo")
            {
                Result.Value = Result.Value.Replace("10", "0");
                Result.Value = Result.Value.Replace(",", "");
            }

            Result.Value = ConvertOper.DoNumberString(Result.Value);//杨斌 2013-08-29

            ResponsePar ObjResponseValue = new ResponsePar();
            ObjResponseValue.BaseTag = "1";
            ObjResponseValue.KeyID = Result.KeyID.ToString();
            ObjResponseValue.KeyValue = Result.Value;
            if (ResponseType == ResponseType.Poll)
            {
                if (PollList.ContainsKey(Result.Value))
                {
                    //if (GlobalInfo.OEMLogo2 == OEMLogos2.oemSunVoteMultiPoll)    
                    //杨斌 2017-02-13
                    if (PanelPoll.IsUseMultiPoll(Globals.SunVoteARSAddIn.PPTShow.SlideShow))
                    {
                        //杨斌 2018-11-22。SDK分段式选举与数字选举不兼容,数字选举模式4值为"1=4",而分段式模式7值为"01-4"
                        int UseModeLimitNumber = TagSet.GetValue(TagKey.Poll_UseModeLimitNumber).ToInt;
                        if (UseModeLimitNumber == 1)
                            ObjResponseValue.KeyValue = Result.Value + "-" + PollList[Result.Value];
                        else
                            ObjResponseValue.KeyValue = Result.Value + "=" + PollList[Result.Value];
                    }
                    else
                        ObjResponseValue.KeyValue = PollList[Result.Value];
                }
            }
            //2012-06-19 添加签到码签到的演示模式
            if ((ResponseType == ResponseType.SignIn) && (TagSet.GetValue(TagKey.SignIn_Mode).ToInt > 0))//杨斌 2017-03-30
            {
                //if (SignCodeList.ContainsKey(Result.Value))
                //    ObjResponseValue.KeyValue = SignCodeList[Result.Value];
            }
            ObjResponseValue.Speed = Result.Speed;

            //多选收到的按键进行排序,与硬件一致,如21转为12。杨斌 2012-11-07
            //注意choice.OptionsMode = 1才有效,否则0要放到最后
            int n0 = ObjResponseValue.KeyValue.IndexOf('0');
            switch (ResponseType)
            {
                case ResponseType.Choice:
                    if (n0 >= 0)
                    {
                        ObjResponseValue.KeyValue = ObjResponseValue.KeyValue.Replace('0', 'J');
                    }
                    char[] ary = ObjResponseValue.KeyValue.ToCharArray();
                    Array.Sort(ary);
                    ObjResponseValue.KeyValue = new string(ary);
                    if (n0 >= 0)
                    {
                        ObjResponseValue.KeyValue = ObjResponseValue.KeyValue.Replace('J', '0');
                    }
                    break;
                default:
                    break;
            }

            ResponseEventHander(ObjResponseValue);
        }

        /// <summary>
        /// 初始化键盘范围
        /// 修改:杨斌 2012-06-27 模拟太快了按键音效太密
        /// </summary>
        /// <returns></returns>
        private bool IniKeypadArea()
        {
            //if (Keypads == null)
            //    throw (new ApplicationException(l.LPT.ReadString("DemoSDK", "initialize", "没有初始化演示的键盘范围")));

            //if (Keypads.Length < 1)
            //    throw (new ApplicationException(GlobalInfo.LPT.ReadString("DemoSDK", "setting", "没有设置演示的键盘范围")));
            DemoMode.KeyIDList.Clear();
            DemoMode.ResultList.Clear();//重新反馈或清空结果时调用
            for (int i = 0; i < Keypads.Length; i++)
            {
                DemoMode.KeyIDList.Add(Keypads[i]);
            }
            //根据设置的键盘数动态设置反馈事件的触发时间间隔
            int interval = 500;
            //2012-06-14 赵丽 键盘个数为0时报错
            if (DemoMode.KeyIDList.Count != 0)
            {
                interval = 10 * 1000 / DemoMode.KeyIDList.Count;
                //杨斌 2014-04-22
                int max = 200;
                if (interval > max)
                    interval = max;
            }
            //interval = interval > 500 ? 500 : interval;//杨斌 2012-10-15,去掉此行
            DemoMode.Interval = interval;
            return true;
        }

        #region IResponse 成员

        public event ResponseEventHander ResponseEventHander;

        /// <summary>
        /// 开始演示投票
        /// </summary>
        public void Start()
        {
            IniKeypadArea();
            switch (ResponseType)
            {
                case ResponseType.Choice:
                    IniChoice();
                    break;
                case ResponseType.Grade:
                    IniGrade();
                    break;
                case ResponseType.Group:
                    IniGroup();
                    break;
                case ResponseType.Vote:
                    IniVote();
                    break;
                case ResponseType.Judge:
                    IniJudge();
                    break;
                case ResponseType.Number:
                    IniNumber();
                    break;
                case ResponseType.Order:
                    IniOrder();
                    break;
                case ResponseType.Poll:
                    IniPoll();
                    break;
                case ResponseType.Score:
                    IniScore();
                    break;
                case ResponseType.SignIn:
                    IniSigIn();
                    break;
                default:
                    break;
            }
            DemoMode.Start();
        }


        /// <summary>
        /// 选择题初始化参数
        /// </summary>
        private void IniChoice()
        {
            ChoiceDemo choice = new ChoiceDemo();
            choice.IsForced = TagSet.GetValue(TagKey.Choice_IisN).ToBoolean;//杨斌 2012-06-27 演示模式时应判断是否迫选
            choice.IsABC = true;//TagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt;//杨斌 2012-06-27
            choice.OptionCount = TagSet.GetValue(TagKey.Choice_OptionCount).ToInt;
            choice.LimitCount = TagSet.GetValue(TagKey.Choice_OptionLimit).ToInt;
            choice.IsOrderly = true;
            DemoMode.DemoType = choice;
        }

        /// <summary>
        /// 等级初始化参数
        /// </summary>
        private void IniGrade()
        {
            ChoiceDemo grade = new ChoiceDemo();
            grade.IsForced = false;//杨斌 2012-06-27
            grade.IsABC = true;//TagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt;//杨斌 2012-06-27
            grade.LimitCount = 1;
            grade.OptionCount = TagSet.GetValue(TagKey.Grade_OptionCount).ToInt;
            DemoMode.DemoType = grade;
        }

        /// <summary>
        /// 分组初始化参数
        /// </summary>
        private void IniGroup()
        {
            ChoiceDemo gruop = new ChoiceDemo();
            gruop.IsForced = false;//杨斌 2012-06-27
            gruop.IsABC = true;//TagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 1 ? 0 : 1;//杨斌 2012-06-27
            gruop.LimitCount = 1;
            gruop.OptionCount = TagSet.GetValue(TagKey.Group_OptionCount).ToInt;
            DemoMode.DemoType = gruop;
        }

        /// <summary>
        /// 判断初始化参数
        /// </summary>
        private void IniJudge()
        {
            ChoiceDemo judge = new ChoiceDemo();
            judge.IsForced = false;//杨斌 2012-06-27
            judge.IsABC = true;//TagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 1 ? 0 : 1;//杨斌 2012-06-27
            judge.LimitCount = 1;
            judge.OptionCount = 2;
            DemoMode.DemoType = judge;
        }

        //初始化表决
        private void IniVote()
        {
            ChoiceDemo vote = new ChoiceDemo();
            vote.IsForced = false;//杨斌 2012-06-27
            vote.IsABC = true;//TagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 1 ? 0 : 1;//杨斌 2012-06-27
            vote.LimitCount = 1;
            vote.OptionCount = TagSet.GetValue(TagKey.Vote_OptionCount).ToInt;
            DemoMode.DemoType = vote;
        }

        /// <summary>
        /// 数值初始化
        /// </summary>
        private void IniNumber()
        {
            NumberDemo number = new NumberDemo();
            //number.MaxLength = 10;
            string lowRange = TagSet.GetValue(TagKey.Number_LowRange).Value;
            string highRange = TagSet.GetValue(TagKey.Number_HighRange).Value;
            string dec = TagSet.GetValue(TagKey.Number_DecimalFormat).Value;

            number.Decimal = (dec.Trim() == "") ? 0 : (ConvertOper.Convert(dec).ToInt);//Convert.ToInt32有问题。杨斌 2012-11-15
            //最小值
            number.MinVal = (lowRange.Trim() == "") ? -9999999 : (ConvertOper.Convert(lowRange).ToInt);//Convert.ToInt32有问题。杨斌 2012-11-15
            //最大值
            number.MaxVal = (highRange.Trim() == "") ? 9999999 : (ConvertOper.Convert(highRange).ToInt);//Convert.ToInt32有问题。杨斌 2012-11-15

            DemoMode.DemoType = number;
        }

        /// <summary>
        /// 初始化排序
        /// </summary>
        private void IniOrder()
        {
            ChoiceDemo order = new ChoiceDemo();
            order.IsForced = TagSet.GetValue(TagKey.Order_IisN).ToBoolean;//杨斌 2012-06-27 演示模式时应判断是否迫选
            order.IsABC = true;//TagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 1 ? 0 : 1;//杨斌 2012-06-27
            order.OptionCount = TagSet.GetValue(TagKey.Order_OptionCount).ToInt;
            order.LimitCount = TagSet.GetValue(TagKey.Order_OptionLimit).ToInt;
            order.IsOrderly = false;
            DemoMode.DemoType = order;
        }

        /// <summary>
        /// 初始化选举
        /// </summary>
        private void IniPoll()
        {
            NumberDemo poll = new NumberDemo();
            poll.Decimal = 0;
            //poll.MaxLength = 10;
            if (PollList.Count > 0)
            {
                //最小值
                poll.MinVal = 0;
                //最大值            
                poll.MaxVal = PollList.Count - 1;
            }
            else//杨斌 2014-10-24
            {
                //最小值
                poll.MinVal = 8801;
                //最大值            
                poll.MaxVal = 8820;
            }
            DemoMode.DemoType = poll;
        }

        /// <summary>
        /// 初始化分数
        /// </summary>
        private void IniScore()
        {
            NumberDemo score = new NumberDemo();
            string lowRange = TagSet.GetValue(TagKey.Score_LowRange).Value;
            string highRange = TagSet.GetValue(TagKey.Score_HighRange).Value;
            string dec = TagSet.GetValue(TagKey.Score_DecimalFormat).Value;
            //score.MaxLength = 10;

            score.Decimal = (dec.Trim() == "") ? 0 : (ConvertOper.Convert(dec).ToInt);//Convert.ToInt32有问题。杨斌 2012-11-15
            //最小值
            score.MinVal = (lowRange.Trim() == "") ? 0 : (ConvertOper.Convert(lowRange).ToInt);//Convert.ToInt32有问题。杨斌 2012-11-15
            //最大值
            score.MaxVal = (highRange.Trim() == "") ? 99999 : (ConvertOper.Convert(highRange).ToInt);//Convert.ToInt32有问题。杨斌 2012-11-15

            DemoMode.DemoType = score;
        }

        /// <summary>
        /// 初始化签到
        /// </summary>
        private void IniSigIn()
        {
            BaseDemo signIn = new BaseDemo();
            signIn.ResultValue = "1";
            DemoMode.DemoType = signIn;
        }

        /// <summary>
        /// 键盘测试
        /// </summary>
        public void KeyTestStart()
        {
            ChoiceDemo vote = new ChoiceDemo();
            vote.OptionCount = 3;
            vote.LimitCount = 1;
            DemoMode.DemoType = vote;
            DemoMode.Start();
        }

        public void Stop()
        {
            DemoMode.Stop();
        }

        /// <summary>
        /// 基站连接类,演示模式不需要
        /// </summary>
        public SunVote.BaseConnection BaseConnection { get; set; }
        /// <summary>
        /// 幻灯片容器
        /// </summary>
        public TagSet TagSet { get; set; }
        /// <summary>
        /// 反馈类型
        /// </summary>
        public ResponseType ResponseType { get; set; }

        #endregion
    }
}