Beispiel #1
0
        public void TrySetDevice(Device device, Action <SendResult> onComplete)
        {
            var oldDevice = Device;

            Device = device;
            try {
                SystemInfo info = new SystemInfo(_sysInfoParser);
                SendCommand(info, false, sr =>
                {
                    IsConnected = sr.Success;

                    if (!IsConnected)
                    {
                        Device = oldDevice;
                        onComplete.NullableInvoke(sr);
                    }
                    else
                    {
                        Device.Zones   = info.Zones.Select(z => z.TheZone).ToArray();
                        Device.Sources = info.Sources.Values.ToArray();
                        SendCommands(new Queue <ACommand>(info.Zones), onComplete);
                    }
                });
            } catch (Exception exp) {
                IsConnected = false;
                onComplete.NullableInvoke(SendResult.Error(exp));
            }
        }
Beispiel #2
0
        protected void RequestCallback(IAsyncResult ar)
        {
            var state = (RequestState)ar.AsyncState;

            try {
                using (var stream = state.Request.EndGetRequestStream(ar)) {
                    stream.Write(state.Body, 0, state.Body.Length);
                }
                state.Request.BeginGetResponse(ResponseCallback, state);
            } catch (Exception exp) {
                state.OnCompleted.NullableInvoke(SendResult.Error(exp));
            }
        }
Beispiel #3
0
        protected void ResponseCallback(IAsyncResult ar)
        {
            var state = (RequestState)ar.AsyncState;

            try {
                var response = state.Request.EndGetResponse(ar);
                using (var sr = new StreamReader(response.GetResponseStream())) {
                    state.OnResponse(sr.ReadToEnd());
                }
                Process(state);
            } catch (Exception exp) {
                state.OnCompleted.NullableInvoke(SendResult.Error(exp));
            }
        }
Beispiel #4
0
 public void UpdateStatus(Action <SendResult> OnComplete)
 {
     try {
         var commands = new Queue <ACommand>();
         foreach (var z in Zones)
         {
             commands.Enqueue(new RefreshZone(z, _sysInfoParser.ZoneParser));
         }
         //commands.Enqueue(_PartyMode);
         SendCommands(commands, OnComplete);
     } catch (Exception exp) {
         OnComplete(SendResult.Error(exp));
     }
 }
Beispiel #5
0
        public SendResult ParseResponse(string xml, Zone z)
        {
            var responseXML = XElement.Parse(xml);

            if (null != responseXML.Descendants("Basic_Status").FirstOrDefault())
            {
                z.Volume        = ParseVolume(responseXML.Descendants("Volume").FirstOrDefault());
                z.PowerOn       = responseXML.CompareElementVal("Power", "On");
                z.Sleeping      = responseXML.CompareElementVal("Sleep", "On");
                z.SelectedInput = responseXML.GetStrFromEV("Input_Sel", string.Empty);
                z.Surround      = ParseSurround(responseXML.Descendants("Surround").FirstOrDefault());
                return(SendResult.Succcess);
            }
            else if (null != responseXML.Descendants("Config").FirstOrDefault())
            {
                z.HasVolume   = responseXML.CompareElementVal("Volume_Existence", "Exist");
                z.DisplayName = responseXML.GetStrFromEV("Zone", z.Name);
                return(SendResult.Succcess);
            }
            else if (null != responseXML.Descendants("Input_Sel_Item").FirstOrDefault())
            {
                z.Inputs = ParseInputs(responseXML);
                return(SendResult.Succcess);
            }
            else if (null != responseXML.Descendants("Scene_Sel_Item").FirstOrDefault())
            {
                z.Scenes = ParseScenes(responseXML);
                return(SendResult.Succcess);
            }
            else if (null != responseXML.Descendants("Pure_Direct").FirstOrDefault())
            {
                z.PureDirectOn = ParsePureDirect(responseXML);
                return(SendResult.Succcess);
            }
            return(SendResult.Error(new Exception("Unknown response returned.")));
        }
Beispiel #6
0
        public SendResult Reserve(Game game, int timeCode, int seatCode, int cNumber, CustomersInfo customer, Pay pay, Discount discount, IEnumerable <Option> options)
        {
            string payType = pay.PayType switch
            {
                PayType.Cash => Tickets.Communicator.Cash,
                PayType.IC => pay.ICIDm,
                PayType.Credit => throw new NotImplementedException("クレジットカードによる決済は未実装です。"),
                      _ => throw new ArgumentOutOfRangeException(),
            };
            int number = (int)game * 100 + timeCode;

            dynamic    json   = null;
            SendResult result = null;

            switch (PluginHost.SendType)
            {
            case SendTypes.Inquire:
                try
                {
                    json = Communicator.Inquire(number);
                }
                catch (Exception ex)
                {
                    return(SendResult.Error(ex));
                }

                try
                {
                    result = ParseResult(json);
                }
                catch (Exception ex)
                {
                    try
                    {
                        return(SendResult.Error(ex, json, ResultTypeStringToEnum(json)));
                    }
                    catch
                    {
                        return(SendResult.Error(ex));
                    }
                }
                break;

            case SendTypes.Sell:
            case SendTypes.Reserve:
                try
                {
                    json = seatCode == -1 ?
                           Communicator.Reserve(number, customer.Total, payType, StationName + TerminalName, PluginHost.IsTestMode) :
                           Communicator.Reserve_Forced(number, seatCode, cNumber, payType, StationName + TerminalName, PluginHost.IsTestMode);
                }
                catch (Exception ex)
                {
                    return(SendResult.Error(ex));
                }

                try
                {
                    bool isFirstReservation = false;
                    if (!PluginHost.IsOneTimeMode && PluginHost.SendType == SendTypes.Reserve)
                    {
                        PluginHost.IsOneTimeMode = true;
                        isFirstReservation       = true;
                    }

                    result = ParseResult(json, new Func <int, int, List <TicketBase> >((issueNumber, countStartNumber) =>
                    {
                        NativeNumberedTicket ticket = new NativeNumberedTicket(new IssueInformation()
                        {
                            TerminalName = StationName + TerminalName, Number = CompanyNumber
                        }, new NumberedTicketInformation()
                        {
                            StartDate           = DateTime.Parse(json.date + " " + json.time1),
                            EndDate             = DateTime.Parse(json.date + " " + json.time2),
                            Name                = (GameName)game,
                            Persons_Adult       = customer.Adult + customer.Student,
                            Persons_Child       = customer.Child + customer.Preschooler,
                            ReserveNumber       = ((string[])json.number).Select(n => int.Parse(n)).ToArray(),
                            CNumber             = ((string[])json.cNumber).Select(n => int.Parse(n)).ToArray(),
                            Forced              = seatCode != -1,
                            IssuedDate          = DateTime.Parse(json.now),
                            IssueNumber         = issueNumber,
                            CountBeginNumber    = countStartNumber,
                            IsWorkingOnInternet = true,
                            WriteNumberOfPerson = PluginHost.IsOneTimeMode,
                            IsIC                = pay.PayType == PayType.IC,
                            DoOmitGuides        = options.Contains(Option.OmitGuidePrinting),
                            DoHelp              = !options.Contains(Option.NoHelp),
                            IsChanged           = options.Contains(Option.Changed),
                            InfoTop             = PluginHost.IsTestMode ? AdditionalInformation_Top.Test : pay.PayType switch
                            {
                                PayType.Cash => AdditionalInformation_Top.None,
                                PayType.IC => AdditionalInformation_Top.IC,
                                _ => throw new ArgumentOutOfRangeException(),
                            },
                            InfoBottom = discount switch
                            {
                                Discount.CompanyUse => AdditionalInformation_Bottom.CompanyUse,
                                Discount.Member => AdditionalInformation_Bottom.Staff,
                                Discount.School => AdditionalInformation_Bottom.Student,
                                _ => AdditionalInformation_Bottom.None,
                            },
                        }, PrintSetting);

                        return(ticket.ticketImages.Select((t, i) => (TicketBase) new NumberedTicket(ticket, i)).ToList());
                    }));
Beispiel #7
0
        public SendResult Reserve(int year, int count, string discount, Option option)
        {
            dynamic json = null;

            switch (PluginHost.SendType)
            {
            case SendTypes.Inquire:
                try
                {
                    json = Communicator.CheckClubMagazine(year, count);
                }
                catch (Exception ex)
                {
                    return(SendResult.Error(ex));
                }

                try
                {
                    return(ParseResult(json, true));
                }
                catch (Exception ex)
                {
                    try
                    {
                        return(SendResult.Error(ex, json, ResultTypeStringToEnum(json)));
                    }
                    catch
                    {
                        return(SendResult.Error(ex));
                    }
                }

            case SendTypes.Sell:
            case SendTypes.Reserve:
                try
                {
                    json = Communicator.BuyClubMagazine(year, count, discount, StationName + TerminalName, PluginHost.IsTestMode);
                }
                catch (Exception ex)
                {
                    return(SendResult.Error(ex));
                }

                try
                {
                    bool isFirstReservation = false;
                    if (!PluginHost.IsOneTimeMode && PluginHost.SendType == SendTypes.Reserve)
                    {
                        PluginHost.IsOneTimeMode = true;
                        isFirstReservation       = true;
                    }

                    SendResult result = ParseResult(json, new Func <int, int, List <TicketBase> >((issueNumber, countStartNumber) =>
                    {
                        NativeEventTicket ticket = new NativeEventTicket(new IssueInformation()
                        {
                            TerminalName = StationName + TerminalName, Number = CompanyNumber
                        }, new EventTicketInformation()
                        {
                            Title               = "部誌購入証",
                            Product             = "部誌" + Strings.StrConv(year.ToString(), VbStrConv.Wide) + "号",
                            Description         = "出札にて保管すること",
                            Amount_Adult        = json.price,
                            ValidType           = TicketValidTypes.Once,
                            UseDate             = DateTime.Parse(json.now),
                            Persons_Adult       = 1,
                            IssuedDate          = DateTime.Parse(json.now),
                            IssueNumber         = issueNumber,
                            CountBeginNumber    = countStartNumber,
                            IsWorkingOnInternet = true,
                            InfoTop             = AdditionalInformation_Top.None,
                        }, PrintSetting);

                        return(ticket.ticketImages.Select((t, i) => (TicketBase) new EventTicket(ticket, i)).ToList());
                    }));

                    if (PluginHost.SendType == SendTypes.Reserve)
                    {
                        result.Text = "#" + Strings.StrConv($"{PluginHost.ReservedResults.Count + 1}", VbStrConv.Wide);
                    }
                    if (isFirstReservation)
                    {
                        result.Message = "一括一件開始しました";
                    }

                    return(result);
                }
                catch (Exception ex)
                {
                    try
                    {
                        return(SendResult.Error(ex, ResultTypeStringToEnum(json)));
                    }
                    catch
                    {
                        return(SendResult.Error(ex));
                    }
                }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        public SendResult CancelNumberedTicket(Game game, int timeCode, int seatCode, int cNumber)
        {
            int number = (int)game * 100 + timeCode;

            dynamic    json   = null;
            SendResult result = null;

            switch (PluginHost.SendType)
            {
            case SendTypes.Inquire:
                try
                {
                    json = Communicator.Inquire(number);
                }
                catch (Exception ex)
                {
                    return(SendResult.Error(ex));
                }

                try
                {
                    result = ParseResult(json);
                }
                catch (Exception ex)
                {
                    try
                    {
                        return(SendResult.Error(ex, json, ResultTypeStringToEnum(json)));
                    }
                    catch
                    {
                        return(SendResult.Error(ex));
                    }
                }
                break;

            case SendTypes.Sell:
            case SendTypes.Reserve:
                try
                {
                    json = Communicator.Cancel((int)game * 10000 + timeCode * 100 + seatCode, cNumber);
                }
                catch (Exception ex)
                {
                    return(SendResult.Error(ex));
                }

                try
                {
                    switch ((string)json.result)
                    {
                    case "yes":
                        result = SendResult.Yes("", "", false);
                        break;

                    case "notReserved":
                        result = SendResult.No("指定された枠は予約されていません");
                        break;

                    case "used":
                        result = SendResult.No("使用済");
                        break;

                    case "wrongCNumber":
                        result = SendResult.Rethink("C符号誤り");
                        break;

                    case "invalidValue":
                        result = SendResult.Rethink("コード誤り");
                        break;

                    default:
                        result = SendResult.Rethink((string)json.result);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    return(SendResult.Error(ex));
                }
                break;
            }

            return(result);
        }