예제 #1
0
        private void LoadDevice()
        {
            foreach (ChannelInfoControl child in Channels.Children.OfType <ChannelInfoControl>())
            {
                child.ToggleStateClicked -= ChannelControl_ToggleStateClicked;
            }
            Channels.Children.Clear();

            IRelayDeviceInfo device = GetCurrentDevice();

            if (device == null)
            {
                return;
            }

            using (var relayController = new RelayController())
            {
                relayController.ConnectDevice(device);

                List <IRelayChannelInfo> channels = relayController.ListChannels(device);
                foreach (var channel in channels)
                {
                    var channelControl = new ChannelInfoControl(device, channel);
                    channelControl.ToggleStateClicked += ChannelControl_ToggleStateClicked;
                    Channels.Children.Add(channelControl);
                }
            }
        }
예제 #2
0
 /// <summary>
 // Deterministic Update
 /// <summary>
 public void SpecUpdate()
 {
     timelefttilorder++;
     timepassedactual += TrueSyncManager.DeltaTime;
     if (timelefttilorder > 50 && ismission && PhotonNetwork.isMasterClient && shipstartspawn.Count > 0)
     {
         shipsmissionspawned++;
         TSVector spawnpos = PositinonRelativeToHeadset.getspawnpos(team);
         if (crosslevelvar.campaignlevel.objective == MainMenuCampaignControlScript.eMissionObjective.Survive)
         {
             spawnpos = startpos;
         }
         if (spawnpos == new TSVector(0, 0, 0))
         {
             spawnpos = defaultspawnpos;
         }
         if (InputRelay == null)
         {
             InputRelay = GameObject.Find("TrueSyncManager").GetComponent <RelayController>();
         }
         if (InputRelay != null)
         {
             InputRelay.ordershipspawn(shipstartspawn[0], (defaultspawnpos * 500) + new TSVector(0, 0, shipsmissionspawned * 1000), UnitMovementcommandcontroller.findspawnteamreverse(team), PhotonNetwork.AllocateViewID());
         }
         shipstartspawn.RemoveAt(0);
     }
 }
예제 #3
0
        public void SendData()
        {
            string text = "";
            int    expected_byte_count = CONSTANTS.MAX_FRAME_DATA;

            for (int i = 0; i < expected_byte_count; i++)
            {
                text += "x";
            }
            byte[]             data_bytes = Encoding.UTF8.GetBytes(text);
            IEmissionProcessor receiver   = new ApiFrameEmissionProcessor();
            IRelay             relay      = new SerialRelay("COM4", receiver);

            using (RelayController ctrl_send = new RelayController(relay, receiver, transmissionFactory))
            {
                ulong  long_address  = 0x0013A20041B764AD;
                ushort short_address = ctrl_send.Discover(long_address);
                for (int i = 0; i < 1000; i++)
                {
                    // send ACTUAL data
                    try
                    {
                        ctrl_send.SendRawBytes(short_address, data_bytes);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine($"Failed at iteration {i} after {CONSTANTS.MAX_FRAME_DATA * i} bytes");
                        break;
                    }
                }
            }
        }
예제 #4
0
 void ChannelConnection_DisconnectedEvent(object sender, EventArgs e)
 {
     Log.Info("Relay IP: {0} disconnected", this.m_CurrentInfo != null ? this.m_CurrentInfo.Id.ToString() : this.ToString());
     this.Dispose();
     RelayController.DisconnecteRelayServer(this.m_CurrentInfo != null ? this.m_CurrentInfo.Id : this.CurrentInfo.Id);
     this.m_CurrentInfo = null;
     //Game server will be corresponding status offline
 }
예제 #5
0
        private void Initialize()
        {
            // Initialize Relay Controller
            relayController = new RelayController();

            // Configure timer to 2000ms delayed start and 10000ms interval
            relayTimer = new Timer(new TimerCallback(RelayTimerTick), null, 2000, 10000);
        }
예제 #6
0
        public static void Handle_RegisterRelayServer(RelayConnection net, PacketReader reader)
        {
            byte   id       = reader.ReadByte();
            short  port     = reader.ReadLEInt16();
            string ip       = reader.ReadDynamicString();
            string password = reader.ReadDynamicString();
            bool   success  = RelayController.RegisterRelayServer(id, password, net, port, ip);

            net.SendAsync(new NET_RelayRegistrationResult(success));
        }
예제 #7
0
        private void ChannelControl_ToggleStateClicked(object sender, ChannelToggledEventArgs e)
        {
            using (var relayController = new RelayController())
            {
                relayController.ConnectDevice(e.DeviceInfo);

                var control = sender as ChannelInfoControl;
                control.ChannelInfo = relayController.ToggleChannel(e.DeviceInfo, e.ChannelInfo.Index);
            }
        }
예제 #8
0
 private void Connect()
 {
     try
     {
         this.relay           = this.relayFactory.Create("XBee A", "12345");
         this.relayController = new RelayController(this.relay, this.processor, new TransmissionObjectFactory(new NonCompressor()));
     }
     catch (Exception e)
     {
         Debug.WriteLine($"Error while connecting to bluetooth ({e.Message})");
     }
 }
예제 #9
0
        public MainPage()
        {
            this.InitializeComponent();

            // Giriş / Çıkış Portunu başlat
            gc = new IOPort(false, false, false, false);

            // Röle Denetleyicisini başlat
            role = new RelayController();

            // Ölçüm timer'ını yapılandır
            sensorTimer = new Timer(new TimerCallback(SensorTimerTick), null, 2000, 10000);
        }
예제 #10
0
        private void CloseAllChannels()
        {
            IRelayDeviceInfo device = GetCurrentDevice();

            if (device == null)
            {
                return;
            }
            using (var relayController = new RelayController())
            {
                relayController.ConnectDevice(device);
                relayController.CloseAllChannels(device);
            }
        }
 /// <summary>
 /// Given order immidately after the countdown ends.
 /// </summary>
 /// <param name="a">The ship to spawn</param>
 public void spawnshiprightnow(int a)
 {
     if (InputRelay == null)
     {
         InputRelay = GameObject.Find("TrueSyncManager").GetComponent <RelayController>();
     }
     if (unitcon == null)
     {
         unitcon  = GameObject.Find("Controllers").GetComponent <UnitMovementcommandcontroller>();
         crossvar = GameObject.Find("CrossLevelVariables").GetComponent <CrossLevelVariableHolder>();
     }
     if (InputRelay != null)
     {
         InputRelay.ordershipspawn(a, getspawnpos(unitcon.team), crossvar.findspawnpos(PhotonNetwork.player.ID), PhotonNetwork.AllocateViewID());
     }
 }
예제 #12
0
        /// <summary>
        /// Dumps the state of the relays.
        /// </summary>
        /// <param name="relayBoard">The relay board.</param>
        private static void DumpRelaysState(RelayController relayBoard)
        {
            var states = relayBoard.GetRelaysStateDictionary();

            "STATUS DUMP".Info();
            "RELAY:     \t8\t7\t6\t5\t4\t3\t2\t1".Info();
            ($"STATE:     \t" +
             $"{(states[RelayNumber.Relay08] ? 1 : 0)}\t" +
             $"{(states[RelayNumber.Relay07] ? 1 : 0)}\t" +
             $"{(states[RelayNumber.Relay06] ? 1 : 0)}\t" +
             $"{(states[RelayNumber.Relay05] ? 1 : 0)}\t" +
             $"{(states[RelayNumber.Relay04] ? 1 : 0)}\t" +
             $"{(states[RelayNumber.Relay03] ? 1 : 0)}\t" +
             $"{(states[RelayNumber.Relay02] ? 1 : 0)}\t" +
             $"{(states[RelayNumber.Relay01] ? 1 : 0)}\t").Info();
        }
예제 #13
0
        public void TransmitLargeObject()
        {
            int expected_byte_count = 20000;

            byte[] raw_bytes = new byte[expected_byte_count];
            Random rnd       = new Random();

            for (int i = 0; i < expected_byte_count; i++)
            {
                //raw_bytes[i] = (byte)rnd.Next();
                raw_bytes[i] = (byte)'x';
            }
            using (RelayController ctrl_send = RelayController.ConnectSerial("COM4"))
            {
                using (RelayController ctrl_rcv = RelayController.ConnectSerial("COM6"))
                {
                    ctrl_send.Clear();
                    ulong  long_address  = 0x0013A20041B764AD;
                    ushort short_address = ctrl_send.Discover(long_address);
                    // receive "Discover" emission
                    List <byte> rcv_bytes = ctrl_rcv.ReceiveBytes();
                    Assert.AreEqual("Discover".Length, rcv_bytes.Count);
                    // send actual data
                    try
                    {
                        ctrl_send.Transmit(short_address, raw_bytes);
                    }
                    catch
                    {
                        // ignored
                        Console.WriteLine("Transmission failed");
                    }
                    List <EmissionDescriptor> emissions = ctrl_send.GetAllEmissions();
                    foreach (EmissionDescriptor descriptor in emissions)
                    {
                        Console.WriteLine($"Unused emission with frame type {descriptor.Header.FrameType}");
                    }
                    // receive actual data
                    byte[] rcv_data_bytes = ctrl_rcv.ReceiveTransmission(0);
                    Assert.AreEqual(expected_byte_count, rcv_data_bytes.Length);
                    for (int i = 0; i < expected_byte_count; i++)
                    {
                        Assert.AreEqual(raw_bytes[i], rcv_data_bytes[i]);
                    }
                }
            }
        }
예제 #14
0
        private void ListDevices()
        {
            using (var relayController = new RelayController())
            {
                //var devices = relayController.ListDevices();
                var devices = relayController.ListDevices();

                if (devices.Count == 1)
                {
                    // o bước này khi cắm mạch vào thì biến devices.Count = 1
                    // khi rút mạch vào thì biến devices.Count = 0
                    MessageBox.Show("co ket noi");
                    comboBox1.Items.Add(devices);
                    comboBox1.SelectedIndex = 0;
                }
                else
                {
                    MessageBox.Show("k ket noi");
                }
            }
        }
예제 #15
0
        public MainPage()
        {
            this.InitializeComponent();

            // BME280 Sensörünü başlat
            bme = new BME280Sensor();

            // VEML6075 Sensörünü başlat
            veml = new VEML6075Sensor();

            // VEML6075 Sensörünü yapılandır
            veml.Config(VEML6075Sensor.IntegrationTime.IT_800ms, VEML6075Sensor.DynamicSetting.Normal, VEML6075Sensor.Trigger.NoActiveForceTrigger, VEML6075Sensor.ActiveForceMode.NormalMode, VEML6075Sensor.PowerMode.PowerOn);

            // Giriş / Çıkış Portunu başlat
            gc = new IOPort(false, false, false, false);

            // Röle Denetleyicisini başlat
            role = new RelayController();

            // Ölçüm timer'ını yapılandır
            sensorTimer = new Timer(new TimerCallback(SensorTimerTick), null, 2000, 10000);
        }
예제 #16
0
        private void ListDevices()
        {
            using (var relayController = new RelayController())
            {
                var devices = relayController.ListDevices();
                while (devices.Count == 0)
                {
                    var result = MessageBox.Show(this, "No devices were found. Would you like to try again?",
                                                 "No Devices Found",
                                                 MessageBoxButton.YesNo, MessageBoxImage.Asterisk, MessageBoxResult.Yes);
                    if (result.HasFlag(MessageBoxResult.No))
                    {
                        Application.Current.Shutdown();
                        return;
                    }

                    devices = relayController.ListDevices();
                }

                DevicesComboBox.ItemsSource   = devices;
                DevicesComboBox.SelectedIndex = 0;
            }
        }
예제 #17
0
    /// <summary>
    // checks if it can buy ship and if so, buys ship.
    /// <summary>
    void BuyShip()
    {
        addmoney(increaserate);

        if (actualshiptobuy == 0)
        {
            NextBuy         = randominst.Next(0, 200);
            actualshiptobuy = getshiptobuy(NextBuy);
            if (unitcontrol.getshipbynumber(actualshiptobuy) != null)
            {
                NextBuyCost = unitcontrol.getshipbynumber(actualshiptobuy).GetComponent <_Ship>().PointsToDeploy;
            }
        }

        if (PhotonNetwork.isMasterClient && unitcontrol && checkmoney(money))
        {
            TSVector spawnpos = startpos;
            if (unitcontrol.teammembersout(team).Count != 0)
            {
                spawnpos = PositinonRelativeToHeadset.getspawnpos(team);
            }
            if (crosslevelvar.campaign == true && crosslevelvar.campaignlevel.objective == MainMenuCampaignControlScript.eMissionObjective.Survive)
            {
                spawnpos = startpos;
            }
            if (InputRelay == null)
            {
                InputRelay = GameObject.Find("TrueSyncManager").GetComponent <RelayController>();
            }
            if (InputRelay != null)
            {
                InputRelay.ordershipspawn(actualshiptobuy, spawnpos, UnitMovementcommandcontroller.findspawnteamreverse(team), PhotonNetwork.AllocateViewID());
            }
            lastbuy         = actualshiptobuy;
            actualshiptobuy = 0;
        }
    }
예제 #18
0
        /// <summary>
        /// Main entry point
        /// </summary>
        /// <param name="args">The arguments.</param>
        private static void Main(string[] args)
        {
            using (var relayBoard = new RelayController(s => s.Trace(), (e) => e.Error()))
            {
                var          isOpen     = false;
                var          password   = RelayController.DefaultPassword;
                const string serialPort = "COM6";

                while (isOpen == false)
                {
                    try
                    {
                        $"Opening port {serialPort}".Info();

                        relayBoard.Open(serialPort, password);
                        isOpen = true;
                    }
                    catch (Exception ex)
                    {
                        ex.Log(nameof(Main));
                        password = PromptForPassword();
                    }
                }

                while (true)
                {
                    var selectedOption = Terminal.ReadPrompt("Select an option", ActionOptions, "Exit this program");
                    if (selectedOption.Key == ConsoleKey.Q)
                    {
                        $"Board: Model: {relayBoard.BoardModel}, Version: {relayBoard.BoardVersion}, FW: {relayBoard.FirmwareVersion}, Channels: {relayBoard.RelayChannelCount}, Mode: {relayBoard.RelayOperatingMode}".Info();
                    }
                    else if (selectedOption.Key == ConsoleKey.W)
                    {
                        DumpRelaysState(relayBoard);
                    }
                    else if (selectedOption.Key == ConsoleKey.E)
                    {
                        var newOpModeKey = Terminal.ReadKey("Enter Operating Mode (L for Latching, anything else, Momentary): ", false);
                        relayBoard.RelayOperatingMode = newOpModeKey.Key == ConsoleKey.L ? RelayOperatingMode.Latching : RelayOperatingMode.Momentary;

                        $"Relay Operating Mode is now: {relayBoard.RelayOperatingMode}".Info();
                    }
                    else if (selectedOption.Key == ConsoleKey.R)
                    {
                        $"Relay Board Working Voltage: {relayBoard.WorkingVoltage}".Info();
                        $"Relay Board Temperature    : {relayBoard.Temperature}".Info();
                    }
                    else if (selectedOption.Key == ConsoleKey.T)
                    {
                        relayBoard.ChangePassword(PromptForPassword());
                    }
                    else if (selectedOption.Key == ConsoleKey.A)
                    {
                        relayBoard.SetRelayStateAll(true);
                    }
                    else if (selectedOption.Key == ConsoleKey.S)
                    {
                        relayBoard.SetRelayStateAll(false);
                    }
                    else if (selectedOption.Key == ConsoleKey.D)
                    {
                        var relayNumber = (RelayNumber)Terminal.ReadNumber("Enter a relay number from 1 to 8", 1);
                        if ((int)relayNumber >= 1 && (int)relayNumber <= 8)
                        {
                            relayBoard[relayNumber] = true;
                        }
                        else
                        {
                            "Bad relay number. Argument must be between 1 and 8".Error();
                        }
                    }
                    else if (selectedOption.Key == ConsoleKey.F)
                    {
                        var relayNumber = (RelayNumber)Terminal.ReadNumber("Enter a relay number from 1 to 8", 1);
                        if ((int)relayNumber >= 1 && (int)relayNumber <= 8)
                        {
                            relayBoard[relayNumber] = false;
                        }
                        else
                        {
                            "Bad relay number. Argument must be between 1 and 8".Error();
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }

            Terminal.ReadKey("Press any key to continue . . .");
        }
 /// <summary>
 /// Reset the InputRelay.
 /// </summary>
 public override void OnSyncedStart()
 {
     InputRelay = GameObject.Find("TrueSyncManager").GetComponent <RelayController>();
 }
예제 #20
0
 /// <summary>
 /// the truesync deterministic start, update everything relating to that.
 /// </summary>
 public override void OnSyncedStart()
 {
     inputrelay = GameObject.Find("TrueSyncManager").GetComponent <RelayController>();
     owner      = TrueSyncManager.LocalPlayer;
     ownerIndex = TrueSyncManager.LocalPlayer.Id;
 }
예제 #21
0
    /// <summary>
    /// Run 90 times a second to accept input from the player and reduce the build and move order stack.
    /// </summary>
    public override void OnSyncedInput()
    {
        if (running)
        {
            foreach (_Ship ship in unitcomscript.allshipsscript)
            {
                if (ship && ship.gameObject != null)
                {
                    ship.Update();
                }
            }
        }
        if (shipstobuy.Count == 0 && orderstodo.Count == 0)
        {
            TrueSyncInput.SetInt(0, 10);
        }
        if (manager == null || (manager.relay == null && unitcomscript != null))
        {
            if (unitcomscript)
            {
                manager = GameObject.Find("TrueSyncManager").GetComponent <RelayController>();
                unitcomscript.output = true;
                manager.relay        = this;
                Debug.Log(manager.relay);
            }
        }
        if (unitcomscript)
        {
            unitcomscript.output = true;
        }
        else
        {
            unitcomscript = unitcomscript = GameObject.Find("Controllers").GetComponent <UnitMovementcommandcontroller>();
        }
        if (shipstobuy.Count > 0)
        {
            TrueSyncInput.SetInt(0, 1);
            TrueSyncInput.SetInt(1, shipstobuy[0].spawnship);
            TrueSyncInput.SetTSVector(2, shipstobuy[0].spawnpos);
            TrueSyncInput.SetInt(3, shipstobuy[0].spawnteam);
            TrueSyncInput.SetInt(4, shipstobuy[0].viewID);
            Debug.Log(shipstobuy[0].spawnship + " " + shipstobuy[0].spawnpos + " " + shipstobuy[0].viewID);
            shipstobuy.RemoveAt(0);
        }
        else
        {
            TrueSyncInput.SetInt(1, 0);
        }

        if (orderstodo.Count > 0)
        {
            int i = 2;
            TrueSyncInput.SetInt((byte)0, 0);
            //  i++;
            foreach (GameObject gam in orderstodo[0].selectedships)
            {
                if (orderstodo[0].targethold == null && gam.gameObject != null)
                {
                    PhotonView targetview = gam.GetComponent <PhotonView>();
                    TrueSyncInput.SetInt((byte)i, targetview.viewID);
                    i++;
                    TrueSyncInput.SetTSVector((byte)i, TargetPosition((i / 2), GameObject.Find("World").transform.Find("Objects").InverseTransformPoint(orderstodo[0].targetpos.ToVector()).ToTSVector(), orderstodo[0].selectedships.Count));
                    i++;
                    TrueSyncInput.SetInt((byte)i, 3000);
                    i++;
                    TrueSyncInput.SetFP((byte)i, orderstodo[0].averagespeed);
                    i++;
                    TrueSyncInput.SetBool((byte)i, orderstodo[0].waypoints);
                    i++;
                }
                else if (gam.gameObject != null)
                {
                    PhotonView targetview = gam.GetComponent <PhotonView>();
                    TrueSyncInput.SetInt((byte)i, targetview.viewID);
                    i++;
                    TrueSyncInput.SetTSVector((byte)i, TargetPosition((i / 2), GameObject.Find("World").transform.Find("Objects").InverseTransformPoint(orderstodo[0].targetpos.ToVector()).ToTSVector(), orderstodo[0].selectedships.Count));
                    i++;
                    TrueSyncInput.SetInt((byte)i, orderstodo[0].targethold.GetComponent <PhotonView>().viewID);
                    i++;
                    TrueSyncInput.SetFP((byte)i, orderstodo[0].averagespeed);
                    i++;
                    TrueSyncInput.SetBool((byte)i, orderstodo[0].waypoints);
                    i++;
                }
            }
            TrueSyncInput.SetInt(1, i);
            orderstodo.RemoveAt(0);
        }

        if (runsimulationnow)
        {
            TrueSyncInput.SetInt(100, 1);
            runsimulationnow = false;
        }
    }
예제 #22
0
        public void ScrambleAndTransmit()
        {
            int  expected_byte_count = 1000;
            uint expected_object_id  = 5;

            byte[] raw_bytes = new byte[expected_byte_count];
            for (int i = 0; i < expected_byte_count; i++)
            {
                raw_bytes[i] = (byte)i;
            }
            using (RelayController ctrl_send = RelayController.ConnectSerial("COM4"))
            {
                using (RelayController ctrl_rcv = RelayController.ConnectSerial("COM6"))
                {
                    ctrl_send.Clear();
                    ulong  long_address  = 0x0013A20041B764AD;
                    ushort short_address = ctrl_send.Discover(long_address);
                    // receive "Discover" emission
                    List <byte> rcv_bytes = ctrl_rcv.ReceiveBytes();
                    Assert.AreEqual("Discover".Length, rcv_bytes.Count);
                    // send actual data
                    try
                    {
                        TransmissionObject xm           = transmissionFactory.Create(raw_bytes, expected_object_id);
                        byte[]             header_bytes = xm.Header.Pack().ToArray();
                        ctrl_send.SendRawBytes(short_address, header_bytes);
                        int    total_byte_count = header_bytes.Length;
                        Random rnd = new Random();
                        IEnumerable <TransmissionChunk> chunks = xm.Chunks.OrderBy(c => rnd.Next());
                        foreach (TransmissionChunk chunk in chunks)
                        {
                            byte[] packet_bytes = chunk.Pack().ToArray();
                            try
                            {
                                ctrl_send.SendRawBytes(short_address, packet_bytes);
                                total_byte_count += packet_bytes.Length;
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine($"Failed at packet {chunk.Header.ID} after {total_byte_count} bytes");
                                throw e;
                            }
                        }
                    }
                    catch
                    {
                        // ignored
                        Console.WriteLine("Transmission failed");
                    }
                    List <EmissionDescriptor> emissions = ctrl_send.GetAllEmissions();
                    foreach (EmissionDescriptor descriptor in emissions)
                    {
                        Console.WriteLine($"Unused emission with frame type {descriptor.Header.FrameType}");
                    }
                    // receive actual data
                    byte[] rcv_data_bytes = ctrl_rcv.ReceiveTransmission(expected_object_id);
                    Assert.AreEqual(expected_byte_count, rcv_data_bytes.Length);
                    for (int i = 0; i < expected_byte_count; i++)
                    {
                        Assert.AreEqual(raw_bytes[i], rcv_data_bytes[i]);
                    }
                }
            }
        }
예제 #23
0
        static void Main(string[] args)//(ip, port, channel, cycletime of updating)<----all are optional
        {
            Console.WriteLine("--------------------------------------------------------------");

            string host = HOST;
            int    port = PORT, channel = CHANNEL, cycleTime = CYCLETIME;

            int tMonth = DateTime.Now.Month;

            try
            {
                if (args[0] != null)
                {
                    host = args[0];
                }
            }
            catch (IndexOutOfRangeException e) { }
            try
            {
                if (args[1] != null)
                {
                    port = int.Parse(args[1]);
                }
            }
            catch (IndexOutOfRangeException e) { }
            try
            {
                if (args[2] != null)
                {
                    channel = int.Parse(args[2]);
                }
            }
            catch (IndexOutOfRangeException e) { }
            try
            {
                if (args[3] != null)
                {
                    cycleTime = int.Parse(args[3]);
                }
            }
            catch (IndexOutOfRangeException e) { }

            try
            {
                c = new RelayController(host, port, channel);

                t1 = new Timer(new TimerCallback((Object obj) =>
                {
                    DateTime now = DateTime.Now;
                    if (now.Date != lastUpdate.Date || isDefault)
                    {
                        updateTime();
                    }
                }), new AutoResetEvent(true), 1000, TIME_UPDATE_INTERVAL);


                t2 = new Timer(new TimerCallback((Object obj) =>
                {
                    updateRelay();
                }), new AutoResetEvent(true), 1000, cycleTime);

                string line = null;

                while (line != "EXIT")
                {
                    Console.WriteLine("\nType \"Exit\" if you leave." +
                                      "\n\"LT\", for showing last update date." +
                                      "\n\"R\", for update relay status immediately." +
                                      "\n\"UR\", for update the cycle time for relay update period immediately." +
                                      "\n\"T\", for update time immediately.\n"
                                      );
                    line = Console.ReadLine().ToUpper();

                    switch (line)
                    {
                    case "LT":
                        Console.WriteLine("Last time to request sunrise and sunset time is " + lastUpdate.ToLongDateString());
                        Console.WriteLine("The light stops between " + start_hour.ToString().PadLeft(2, '0') + ":" + start_min.ToString().PadLeft(2, '0') + " and " + end_hour.ToString().PadLeft(2, '0') + ":" + end_min.ToString().PadLeft(2, '0') + ".");
                        break;

                    case "R":
                        updateRelay();
                        break;

                    case "T":
                        updateTime();
                        break;

                    case "UR":
                        while (true)
                        {
                            Console.WriteLine("Really updates in every " + cycleTime / 1000 + " second. Please enter new update time, or type \"E\" to cancel.");
                            string input   = Console.ReadLine();
                            int    time    = 0;
                            bool   isValid = Int32.TryParse(input, out time);
                            if (isValid && time > 0)
                            {
                                cycleTime = time * 1000;
                                t2.Change(1000, cycleTime);
                                Console.WriteLine("Updated.");
                                break;
                            }
                            else
                            {
                                if (input.ToUpper() == "E")
                                {
                                    break;
                                }
                                Console.WriteLine("Invalid input!");
                            }
                        }
                        break;

                    case "Z":
                        throw new Exception();

                    case "EXIT":
                    default:
                        break;
                    }
                }
            } catch (Exception e)
            {
                t1.Dispose();
                t2.Dispose();
                Main(new string[] { host, port.ToString(), channel.ToString(), cycleTime.ToString() });
                Debugger.print(e.Message);
            }
        }
예제 #24
0
        static void Main(string[] args)
        {
            var relay = new RelayController <VrpnManager>(args);

            relay.RunServerLoop();
        }