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