private async void InitSockerBot() { var hostNames = NetworkInformation.GetHostNames(); var computerName = hostNames.FirstOrDefault(name => name.Type == HostNameType.DomainName)?.DisplayName ?? "???"; var pin = await LagoVista.Core.PlatformSupport.Services.Storage.GetKVPAsync <string>("PIN"); if (String.IsNullOrEmpty(pin)) { var rnd = new Random(); pin = rnd.Next(1000, 9999).ToString(); await LagoVista.Core.PlatformSupport.Services.Storage.StoreKVP("PIN", pin); } Debug.WriteLine("========================================"); Debug.WriteLine("NOTE: NOTE: NOTE: Your PIN is: " + pin); Debug.WriteLine("========================================"); _logger = new Loggers.DebugLogger(); switch (AnalyticsInfo.VersionInfo.DeviceFamily) { case "Windows.IoT": var ports = (await LagoVista.Core.PlatformSupport.Services.DeviceManager.GetSerialPortsAsync()); if (ports.Count == 0) { throw new Exception("Could not find any serial ports, a serial port is required."); } else if (ports.Count > 1) { throw new Exception("Found more than one serial port, please add additional logic to select the serial port the mBot is connected to."); } var serialPortChannel = new SerialPortChannel(ports.First().Id, _logger); await serialPortChannel.ConnectAsync(); _tankBot = new mBlockTankBot(serialPortChannel, _logger, pin); _sensorManager = new SensorManager(); await _sensorManager.InitAsync(); _sensorManager.Start(); break; case "Windows.Desktop": _tankBot = new SimulatedSoccerBot(); break; } ConnectionManager.Start(computerName, _tankBot, _logger, _sensorManager, Constants.WebListenerPort, Constants.TCPListenPort, Constants.UPNPListenPort); }
private void timer1_Tick(object sender, EventArgs e) { timer1.Enabled = false; // setup font styling of terminal control terminalControl1.Font = new Font(ConfigurationManager.AppSettings["TerminalFont"], Convert.ToSingle(ConfigurationManager.AppSettings["TerminalFontSize"]), FontStyle.Bold); // create a new Serial port object _serialPort = new SerialPortChannel(_comPort, _baudRate); // bind the Serial port instance to the terminal console terminalControl1.Bind(_serialPort); // execute any pre-defined command Scripting scripting = terminalControl1.Scripting; scripting.Send("\r"); if (!String.IsNullOrEmpty(_command)) { scripting.Send(_command + "\r"); } _initialized = true; }
public static IServiceCollection AddHardware(this IServiceCollection serviceCollection) { return(serviceCollection .AddCompositeDispenser((sp) => { KioskSettings kioskSettings = sp.GetRequiredService <KioskSettings>(); if (kioskSettings.Dispenser.Mode == OptionUseCase.Off) { return null; } return new CompositeDispenserBuilder() .AddStrategy(sp.GetRequiredService <IDispensingStrategy>()) .AddDispensers(() => kioskSettings.Dispenser.SlaveMachines.Select(x => { if (x.Model.Equals("VisionEsPlus", StringComparison.InvariantCultureIgnoreCase)) { VisionEsPlusSettings settings = new VisionEsPlusSettings { PortNumber = (ushort)x.Port, Address = x.Address, IpAddress = x.IpAddress }; ICommunicationChannel channel = null; if (kioskSettings.Dispenser.Mode != OptionUseCase.Off) { switch (x.Protocol) { case Utils.Common.Enum.CommunicationProtocol.Serial: channel = new SerialPortChannel(settings.PortNumber, settings.BaudRate, settings.Timeout, settings.CommandsSendDelay); break; case Utils.Common.Enum.CommunicationProtocol.TCP: channel = new TcpChannel(settings.IpAddress, settings.PortNumber); break; default: break; } } return new VisionEsPlusVendingMachine(x.Number.ToString(), new VisionEsPlus(channel, settings)); } else { throw new ArgumentException("Unknown dispenser model"); } }) ).Build(); }) .AddLayout((sp) => { KioskSettings kioskSettings = sp.GetRequiredService <KioskSettings>(); if (kioskSettings.Dispenser.Mode == OptionUseCase.Off) { return null; } ILayoutBuilder layoutBuilder = new LayoutBuilder(); if (kioskSettings.Dispenser.SlaveMachines.Any(x => !x.Number.HasValue || x.Number == 0)) { throw new ArgumentException("Machine number is mandatory"); } kioskSettings.Dispenser.SlaveMachines.ToList().ForEach(x => { if (x.Model.Equals("VisionEsPlus", StringComparison.InvariantCultureIgnoreCase)) { // TODO: Refactor this stub if (x.Number == 1) { layoutBuilder.AddMachine <VisionEspMachine, VisionEspTray, VisionEspBelt>(x.Number.Value) .AddTray(11) .AddBelt(2).CommitTray() .AddTray(18) .AddBelt(0).AddBelt(1).AddBelt(2).AddBelt(3).AddBelt(4).AddBelt(5).CommitTray().CommitMachine(); } if (x.Number == 2) { layoutBuilder.AddMachine <VisionEspMachine, VisionEspTray, VisionEspBelt>(x.Number.Value) .AddTray(11) .AddBelt(0).AddBelt(1).AddBelt(2).AddBelt(3).AddBelt(4).CommitTray().CommitMachine(); } } else { throw new ArgumentException("Unknown dispenser model"); } }); return layoutBuilder.Build(); }) .AddCashPayment((sp, cs) => { KioskSettings kioskSettings = sp.GetRequiredService <KioskSettings>(); IEnumerable <ICashDeviceAdapter> cashDevices = null; switch (kioskSettings.Cashbox.Mode) { case OptionUseCase.Emulation: cashDevices = new ICashDeviceAdapter[] { new MockBillAcceptor(sp.GetRequiredService <ICurrencyConverter>(), (s) => { s.IssueIndex = 1; s.BaseCurrency = kioskSettings.BaseCurrency; // Stub s.BillsToReceive = new Money[] { Money.Create(100, CurrencyCode.USDollar), Money.Create(500, CurrencyCode.RussianRouble) }; // Stub s.BillsToGiveChange = new Money[] { Money.Create(50, CurrencyCode.RussianRouble), Money.Create(1, CurrencyCode.USDollar) }; // Stub }) }; break; case OptionUseCase.Off: cashDevices = null; break; case OptionUseCase.On: // ... break; } cs.CashDevices = cashDevices; return cs; }) .AddEcommerce((sp, es) => { KioskSettings kioskSettings = sp.GetRequiredService <KioskSettings>(); foreach (var provider in kioskSettings.ECommerceSettings.PaymentProviders) { switch (provider.Source) { case PaymentSource.UVS: if (kioskSettings.ECommerceSettings.Mode == OptionUseCase.Emulation) { es.Add(new UvsMockEcommerceService(sp.GetRequiredService <ICurrencyConverter>(), (settings) => { settings.BaseCurrency = kioskSettings.BaseCurrency; })); } else if (kioskSettings.ECommerceSettings.Mode == OptionUseCase.On) { // ... } break; default: throw new ArgumentException("Invalid ecommerce source"); } } return es; }) .AddEventMediation((sp, broker) => { broker.AppendProducer(sp.GetRequiredService <IPaymentProvider>() as IEventProducer); broker.AppendProducer(sp.GetRequiredService <ICashPaymentService>() as IEventProducer); broker.AppendProducer(sp.GetRequiredService <ICompositeDispenser>() as IEventProducer); broker.AppendProducer(sp.GetRequiredService <IStorageService>() as IEventProducer); broker.AppendProducer(sp.GetRequiredService <IAttendant>() as IEventProducer); broker.AppendProducer(sp.GetRequiredService <ISlipService>() as IEventProducer); }) .AddSingleton((sp) => new EventConsumer() .AppendWriter <IPaymentProvider>(new EventWriter <IPaymentProvider>(sp.GetRequiredService <ILogger <IPaymentProvider> >())) .AppendWriter <ICashPaymentService>(new EventWriter <ICashPaymentService>(sp.GetRequiredService <ILogger <ICashPaymentService> >())) .AppendWriter <ICompositeDispenser>(new EventWriter <ICompositeDispenser>(sp.GetRequiredService <ILogger <ICompositeDispenser> >())) .AppendWriter <IStorageService>(new EventWriter <IStorageService>(sp.GetRequiredService <ILogger <IStorageService> >())) .AppendWriter <IAttendant>(new EventWriter <IAttendant>(sp.GetRequiredService <ILogger <IAttendant> >())) .AppendWriter <ISlipService>(new EventWriter <ISlipService>(sp.GetRequiredService <ILogger <ISlipService> >())))); }
void connectChannel(int retries = 20) { hasUiUpdate = true; Text_ = "Disconnected"; try { string address = debugChannelAddressesCB.Text.ToUpper(); if (OnVirtualChannelCheck != null) { if (OnVirtualChannelCheck(address)) { Text_ = debugChannelAddressesCB.Text; connectB_ForeColor = Color.Green; connectB_Text = "Disconnect"; Connected?.Invoke(this, new EventArgs()); VirutualChannelConnected?.Invoke(address); return; } } if (address.Contains(".") || address == "LOCALHOST") { Channel = new SocketChannel(address); } else { if (!address.StartsWith("COM")) { address = address.Substring(address.IndexOf("(") + 1); address = address.Substring(0, address.IndexOf(")")); } if (baudRatesCB.Text == "") { baudRatesCB.Text = "115200"; } Channel = new SerialPortChannel(address, Convert.ToInt32(baudRatesCB.Text)); Channel.DtrEnable = dtrCB.Checked; Channel.ReadBufferSize = 1024 * 1024 * 10; } Channel.Open(); PortAddress = address; Connected?.Invoke(this, new EventArgs()); connectB_Text = "Disconnect"; Text_ = debugChannelAddressesCB.Text; connectB_ForeColor = Color.Green; spPollTimer.Enabled = true; } catch (Exception ex) { if (retries > 0) { connectB.ForeColor = Color.Orange; Application.DoEvents(); System.Threading.Thread.Sleep(500); connectChannel(retries - 1); return; } MessageBox.Show("Could not open the channel."); Channel = null; connectB.Text = "Connect"; connectB.ForeColor = Color.Red; } }