diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs index 54db5f7..5f65190 100644 --- a/MainForm.Designer.cs +++ b/MainForm.Designer.cs @@ -32,7 +32,15 @@ lbMain = new ListBox(); statusStripMain = new StatusStrip(); toolStripStatusLabel = new ToolStripStatusLabel(); + menuStrip1 = new MenuStrip(); + discoveryToolStripMenuItem = new ToolStripMenuItem(); + startToolStripMenuItem = new ToolStripMenuItem(); + stopToolStripMenuItem = new ToolStripMenuItem(); + forceReloadToolStripMenuItem = new ToolStripMenuItem(); + saveToolStripMenuItem = new ToolStripMenuItem(); + loadToolStripMenuItem = new ToolStripMenuItem(); statusStripMain.SuspendLayout(); + menuStrip1.SuspendLayout(); SuspendLayout(); // // lbMain @@ -60,19 +68,73 @@ toolStripStatusLabel.Name = "toolStripStatusLabel"; toolStripStatusLabel.Size = new Size(0, 17); // + // menuStrip1 + // + menuStrip1.Items.AddRange(new ToolStripItem[] { discoveryToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new Size(800, 24); + menuStrip1.TabIndex = 2; + menuStrip1.Text = "menuStrip1"; + // + // discoveryToolStripMenuItem + // + discoveryToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { startToolStripMenuItem, stopToolStripMenuItem, forceReloadToolStripMenuItem, saveToolStripMenuItem, loadToolStripMenuItem }); + discoveryToolStripMenuItem.Name = "discoveryToolStripMenuItem"; + discoveryToolStripMenuItem.Size = new Size(70, 20); + discoveryToolStripMenuItem.Text = "Discovery"; + // + // startToolStripMenuItem + // + startToolStripMenuItem.Name = "startToolStripMenuItem"; + startToolStripMenuItem.Size = new Size(180, 22); + startToolStripMenuItem.Text = "Start"; + startToolStripMenuItem.Click += startToolStripMenuItem_Click; + // + // stopToolStripMenuItem + // + stopToolStripMenuItem.Enabled = false; + stopToolStripMenuItem.Name = "stopToolStripMenuItem"; + stopToolStripMenuItem.Size = new Size(180, 22); + stopToolStripMenuItem.Text = "Stop"; + stopToolStripMenuItem.Click += stopToolStripMenuItem_Click; + // + // forceReloadToolStripMenuItem + // + forceReloadToolStripMenuItem.Name = "forceReloadToolStripMenuItem"; + forceReloadToolStripMenuItem.Size = new Size(180, 22); + forceReloadToolStripMenuItem.Text = "Force reload"; + forceReloadToolStripMenuItem.Click += forceReloadToolStripMenuItem_Click; + // + // saveToolStripMenuItem + // + saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + saveToolStripMenuItem.Size = new Size(180, 22); + saveToolStripMenuItem.Text = "Save"; + // + // loadToolStripMenuItem + // + loadToolStripMenuItem.Name = "loadToolStripMenuItem"; + loadToolStripMenuItem.Size = new Size(180, 22); + loadToolStripMenuItem.Text = "Load"; + // // MainForm // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(800, 450); Controls.Add(statusStripMain); + Controls.Add(menuStrip1); Controls.Add(lbMain); Icon = (Icon)resources.GetObject("$this.Icon"); + MainMenuStrip = menuStrip1; Name = "MainForm"; Text = "RoboSpot MotionCamera finder"; FormClosing += MainForm_FormClosing; statusStripMain.ResumeLayout(false); statusStripMain.PerformLayout(); + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); ResumeLayout(false); PerformLayout(); } @@ -82,5 +144,12 @@ private ListBox lbMain; private StatusStrip statusStripMain; private ToolStripStatusLabel toolStripStatusLabel; + private MenuStrip menuStrip1; + private ToolStripMenuItem discoveryToolStripMenuItem; + private ToolStripMenuItem startToolStripMenuItem; + private ToolStripMenuItem stopToolStripMenuItem; + private ToolStripMenuItem forceReloadToolStripMenuItem; + private ToolStripMenuItem saveToolStripMenuItem; + private ToolStripMenuItem loadToolStripMenuItem; } } \ No newline at end of file diff --git a/MainForm.cs b/MainForm.cs index eb7bf8e..b31d386 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -15,6 +15,8 @@ namespace robospot_camera_finder public static string cam_username = "admin"; public static string cam_password = "RoboSpot10"; + private static string browse_scope = "_rtsp._tcp"; + public class Camera { private IPAddress ip; @@ -93,8 +95,6 @@ namespace robospot_camera_finder } } - browser.StartBrowse("_rtsp._tcp"); - lbMain.DataSource = all_cameras; lbMain.DisplayMember = "camera_name"; lbMain.ValueMember = "camera_ip"; @@ -111,8 +111,34 @@ namespace robospot_camera_finder browser.ServiceRemoved += (sender, args) => { - ServiceRemoved(sender, args); + if (browser.IsBrowsing) + { + ServiceRemoved(sender, args); + } }; + + browse(true); + } + + private void browse(bool browse_needed) + { + if (browse_needed) + { + if (!browser.IsBrowsing) + { + browser.StartBrowse(browse_scope); + } + } + else + { + if (browser.IsBrowsing) + { + browser.StopBrowse(); + } + } + + startToolStripMenuItem.Enabled = !browser.IsBrowsing; + stopToolStripMenuItem.Enabled = browser.IsBrowsing; } private void ServiceAdded(object sender, ServiceAnnouncementEventArgs args) @@ -140,8 +166,25 @@ namespace robospot_camera_finder serial = serial_line.Substring("SerialNumber=".Length).Trim(); } - Camera camera = new Camera("Camera " + cam_addr.ToString() + " - " + location + " - " + serial, cam_addr, location, serial); - all_cameras.Add(camera); + Camera new_camera = new Camera("Camera " + cam_addr.ToString() + " - " + location + " - " + serial, cam_addr, location, serial); + + if (all_cameras.Count == 0) + { + all_cameras.Add(new_camera); + } else + { + for (int i = 0; i < all_cameras.Count; i++) + { + if (all_cameras[i].camera_serial == new_camera.camera_serial) + { + all_cameras[i] = new_camera; + } + else + { + all_cameras.Add(new_camera); + } + } + } } } } @@ -180,5 +223,26 @@ namespace robospot_camera_finder toolStripStatusLabel.Text = ""; } } + + private void startToolStripMenuItem_Click(object sender, EventArgs e) + { + browse(true); + } + + private void stopToolStripMenuItem_Click(object sender, EventArgs e) + { + browse(false); + } + + private void forceReloadToolStripMenuItem_Click(object sender, EventArgs e) + { + DialogResult result = MessageBox.Show("Are you sure you want to clear discovered cameras and restart the discovery process ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + if (result == DialogResult.Yes) + { + browse(false); + all_cameras.Clear(); + browse(true); + } + } } } \ No newline at end of file diff --git a/MainForm.resx b/MainForm.resx index aa9339a..968d0ca 100644 --- a/MainForm.resx +++ b/MainForm.resx @@ -120,6 +120,9 @@ 17, 17 + + 153, 17 +