private void b_set_Click(object sender, EventArgs e)
        {
            int _seq;

            for (_seq = 1; _seq <= sequence.Length; ++_seq)
            {
                if (sequence[_seq - 1].Checked)
                {
                    break;
                }
            }

            int _type;

            for (_type = 1; _type <= type.Length; ++_type)
            {
                if (type[_type - 1].Checked)
                {
                    break;
                }
            }

            switch ((Utils.SequenceType)_type)
            {
            case Utils.SequenceType.Fast:
                Utils.Sequence.Set(_seq);
                break;

            case Utils.SequenceType.Timed:
                Utils.Sequence.Set(_seq,
                                   (int)n_hour.Value,
                                   (int)n_minute.Value,
                                   (int)n_second.Value);
                break;

            case Utils.SequenceType.Scheduled:
                Utils.MyDate md = new Utils.MyDate(
                    (int)n_hour.Value,
                    (int)n_minute.Value,
                    (int)n_second.Value
                    );
                if (md.Ticks <= DateTime.Now.Ticks)
                {
                    md = new Utils.MyDate(
                        md.Year,
                        md.Month,
                        md.Day + 1,
                        md.Hour,
                        md.Minute,
                        md.Second
                        );
                }
                Utils.Sequence.Set(_seq, md);
                break;
            }
        }
Beispiel #2
0
        private void MainFrame_Load(object sender, EventArgs e)
        {
            Utils.Log.SetLogBox(tb_log);

            mi_startup.Checked   = Utils.Config.IsSet("startup");
            mi_broadcast.Checked = Utils.Config.IsSet("broadcast");
            mi_restart.Checked   = Utils.Config.IsSet("restart");
            mi_server.Checked    = Utils.Config.IsSet("server");
            mi_alert.Checked     = Utils.Config.IsSet("alert");

            mi_broadcast.Enabled = mi_server.Checked;

            mi_rebroadcast.Enabled = mi_restart.Checked;
            mi_always.Checked      = Utils.Config.Equals("rebroadcast", "0");
            mi_sometimes.Checked   = Utils.Config.Equals("rebroadcast", "1");
            mi_never.Checked       = !mi_always.Checked && !mi_sometimes.Checked;

            mi_broadcast_start.Enabled = !Utils.Broadcast.Running;
            mi_broadcast_stop.Enabled  = !mi_broadcast_start.Enabled;

            mi_server_start.Enabled      = !Utils.Server.IsRunning;
            mi_server_stop.Enabled       = !mi_server_start.Enabled;
            mi_server_disconnect.Enabled = mi_server_stop.Enabled && Utils.Server.IsConnected;


            //for sequence change events
            Utils.Sequence.SequenceChange += (Utils.SequenceChangeEventArgs args) =>
            {
                RunOnUIThread(() =>
                {
                    t_sequence.Text = args.Sequence.ToString();
                    t_type.Text     = args.Type.ToString();
                    switch (args.Type)
                    {
                    case Utils.SequenceType.Fast:
                        t_time.Text = "Immediately";
                        break;

                    case Utils.SequenceType.Timed:
                        t_time.Text =
                            new Utils.MyDate(DateTime.Now.Ticks + args.Millis * 10000).GetString();
                        break;

                    case Utils.SequenceType.Scheduled:
                        t_time.Text = args.Date.GetString();
                        break;

                    default:
                        t_time.Text = "N/A";
                        break;
                    }
                    t_sequence.ForeColor = Utils.Sequence.GetColor(args.Sequence);
                });
            };

            Utils.Broadcast.OnStart += (Utils.ConnectionEventArgs args) =>
            {
                RunOnUIThread(() =>
                {
                    t_broadcast.Text           = "Up";
                    t_broadcast.ForeColor      = Color.Green;
                    mi_broadcast_start.Enabled = false;
                    mi_broadcast_stop.Enabled  = true;
                });
            };

            Utils.Broadcast.OnError += (string message) =>
            {
                RunOnUIThread(() =>
                {
                    t_broadcast.Text           = "Down";
                    t_broadcast.ForeColor      = Color.Red;
                    mi_broadcast_start.Enabled = true;
                    mi_broadcast_stop.Enabled  = false;
                });
            };

            Utils.Broadcast.OnStop += (Utils.ConnectionEventArgs args) =>
            {
                RunOnUIThread(() =>
                {
                    t_broadcast.Text      = "Down";
                    t_broadcast.ForeColor = Color.Red;

                    mi_broadcast_start.Enabled = true;
                    mi_broadcast_stop.Enabled  = false;
                });
            };

            Utils.Server.Connecting += (Utils.ConnectionEventArgs args) =>
            {
                RunOnUIThread(() =>
                {
                    t_server.Text      = "Up";
                    t_server.ForeColor = Color.Green;
                    t_host.Text        = "Waiting for connection";
                    t_host.ForeColor   = Color.GreenYellow;

                    mi_server_start.Enabled      = false;
                    mi_server_stop.Enabled       = true;
                    mi_server_disconnect.Enabled = false;
                });
            };

            Utils.Server.Connected += (Utils.ConnectionEventArgs args) =>
            {
                Utils.Broadcast.Stop();
                RunOnUIThread(() =>
                {
                    t_server.Text      = "Up";
                    t_server.ForeColor = Color.Green;

                    int h       = args.RemoteHostname.Length;
                    int i       = args.RemoteIPEndPoint.Address.ToString().Length;
                    t_host.Text = i > h ? args.RemoteHostname
                            : args.RemoteIPEndPoint.Address.ToString();
                    t_host.ForeColor = Color.Green;

                    mi_server_start.Enabled      = false;
                    mi_server_stop.Enabled       = true;
                    mi_server_disconnect.Enabled = true;
                });
            };

            Utils.Server.Disconnect += (Utils.ConnectionEventArgs args) =>
            {
                RunOnUIThread(() =>
                {
                    t_server.Text      = "Down";
                    t_server.ForeColor = Color.Red;
                    t_host.Text        = "No Controller";
                    t_host.ForeColor   = Color.Red;

                    mi_server_start.Enabled      = true;
                    mi_server_stop.Enabled       = false;
                    mi_server_disconnect.Enabled = false;
                });
            };

            Utils.Server.Error += (string message) =>
            {
                RunOnUIThread(() =>
                {
                    t_server.Text      = "Down";
                    t_server.ForeColor = Color.Red;
                    t_host.Text        = "No Controller";
                    t_host.ForeColor   = Color.Red;

                    mi_server_start.Enabled      = true;
                    mi_server_stop.Enabled       = false;
                    mi_server_disconnect.Enabled = false;
                });
            };

            Utils.Server.OnStop += (Utils.ConnectionEventArgs args) =>
            {
                RunOnUIThread(() =>
                {
                    t_server.Text      = "Down";
                    t_server.ForeColor = Color.Red;
                    t_host.Text        = "No Controller";
                    t_host.ForeColor   = Color.Red;

                    mi_server_start.Enabled      = true;
                    mi_server_stop.Enabled       = false;
                    mi_server_disconnect.Enabled = false;
                });
            };

            Utils.Server.DataReceived += (Utils.DataEventArgs args) =>
            {
                if (args.Data.Key.Trim().ToLower() != "sequence")
                {
                    return;
                }

                try
                {
                    int _seq  = Convert.ToInt16(args.Data.Values[0]);
                    int _type = Convert.ToInt16(args.Data.Values[1]);
                    int _hr   = 0;
                    int _min  = 0;
                    int _sec  = 0;
                    if (_type > (int)Utils.SequenceType.Fast)
                    {
                        _hr  = Convert.ToInt16(args.Data.Values[2]);
                        _min = Convert.ToInt16(args.Data.Values[3]);
                        _sec = Convert.ToInt16(args.Data.Values[4]);
                    }
                    Utils.Sequence.Requested = true;
                    switch ((Utils.SequenceType)_type)
                    {
                    case Utils.SequenceType.Fast:
                        Utils.Sequence.Set(_seq);
                        break;

                    case Utils.SequenceType.Timed:
                        Utils.Sequence.Set(_seq, _hr, _min, _sec);
                        break;

                    case Utils.SequenceType.Scheduled:
                        Utils.MyDate md = new Utils.MyDate(_hr, _min, _sec);
                        if (md.Ticks <= DateTime.Now.Ticks)
                        {
                            md = new Utils.MyDate(
                                md.Year,
                                md.Month,
                                md.Day + 1,
                                md.Hour,
                                md.Minute,
                                md.Second
                                );
                        }
                        Utils.Sequence.Set(_seq, md);
                        break;
                    }
                }
                catch (ArgumentOutOfRangeException)
                {
                    Utils.Log.Write("A stray sequence data received.", Utils.Log.CONSOLE);
                    return;
                }
            };

            if (Utils.Config.IsSet("server"))
            {
                Utils.Server.Start();
                if (Utils.Config.IsSet("broadcast"))
                {
                    Utils.Broadcast.Start();
                }
            }
        }
Beispiel #3
0
 /// <summary>
 /// Creates an instance with specified sequence and datetime when it will be executed.
 /// </summary>
 /// <param name="sequence">The new sequence being set.</param>
 /// <param name="datetime">The DateTime instance of the date time when it will be executed.</param>
 internal SequenceChangeEventArgs(SequenceList sequence, DateTime datetime)
     : this(sequence, SequenceType.Scheduled)
 {
     date = new MyDate(datetime);
 }
Beispiel #4
0
 /// <summary>
 /// Creates an instance with specified sequence and datetime when it will be executed.
 /// </summary>
 /// <param name="sequence">The new sequence being set.</param>
 /// <param name="datetime">The MyDate instance of the date time when it will be executed.</param>
 internal SequenceChangeEventArgs(SequenceList sequence, MyDate datetime)
     : this(sequence, SequenceType.Scheduled)
 {
     date = datetime;
 }
Beispiel #5
0
        /// <summary>
        /// Set the sequence to the specified sequence and its type to Scheduled.
        /// Will execute on the date provided.
        /// </summary>
        /// <param name="seq">The sequence to be set.</param>
        /// <param name="date">DateTime instance of the date when will execute.</param>
        internal static void Set(SequenceList seq, MyDate date)
        {
            Log.Write("Trying to change sequence.");
            if (currentSequence > SequenceList.NoShutdown && seq > SequenceList.NoShutdown)
            {
                OnErrorEvent("There is a sequence already set.");
                return;
            }

            if (seq < SequenceList.Shutdown || seq > SequenceList.LockUser)
            {
                OnErrorEvent("Setting to an invalid timed sequence.");
                return;
            }

            if (date.Millis < new MyDate().Millis + 5000)
            {
                OnErrorEvent("Setting scheduled sequence time five seconds or less in the future.");
                return;
            }

            Stop();

            alarm         = new Alarm(date);
            alarm.Expire += () =>
            {
                ExecuteCommand();
                Reset();
            };
            alarm.AddTimeoutThreshold(60000);
            alarm.AddTimeoutThreshold(600000);
            alarm.AddTimeoutThreshold(3600000);

            alarm.TimeoutRemaining += (int remain) =>
            {
                if (Config.Equals("alert", "1"))
                {
                    string alert = "Will " + CurrentSequence + " in less than ";
                    switch (remain)
                    {
                    case 60000:
                        alert += "a minute.";
                        break;

                    case 600000:
                        alert += "ten minutes.";
                        break;

                    case 3600000:
                        alert += "an hour.";
                        break;
                    }
                    AlertBox.Show("Sequence Reminder!", alert, 15000);
                }
            };
            Console.WriteLine(alarm.Timeout);
            alarm.Start();

            currentType     = SequenceType.Scheduled;
            currentSequence = seq;

            if (Config.Equals("alert", "1"))
            {
                AlertBox.Show("Sequence Changed!",
                              "Will " + seq + " on " + date.GetString() + ".",
                              15000);
            }
            Log.Write("Set sequence to " + currentType + " " + seq + " that will execute on " + date.GetString() + ".");

            OnSequenceChangeEvent(new SequenceChangeEventArgs(CurrentSequence, date));
        }
Beispiel #6
0
 /// <summary>
 /// Set the sequence to the specified integral equivalent of the sequence and its type to Scheduled.
 /// Will execute on the date provided.
 /// </summary>
 /// <param name="seq">The integral equivalent of the sequence.</param>
 /// <param name="date">MyDate instance of the date when will execute.</param>
 internal static void Set(int seq, MyDate date)
 {
     Set((SequenceList)seq, date);
 }
Beispiel #7
0
 /// <summary>
 /// Creates an instance of this class using a specified MyDate instance where
 /// its date will be the date and time when the alarm will expires.
 /// </summary>
 /// <param name="date">The MyDate instance that contains the date and time when the alarm will expires.</param>
 public Alarm(MyDate date) : this()
 {
     this.date = date;
 }