Files
robospot-camera-finder/MainForm.cs
2024-02-17 21:51:49 +01:00

95 lines
2.6 KiB
C#

using System.ComponentModel;
using System.Net;
using System.Runtime.CompilerServices;
using System.Web;
using Tmds.MDns;
namespace robospot_camera_finder
{
public partial class MainForm : Form
{
private readonly ServiceBrowser browser = new();
private BindingList<Camera> all_cameras = new();
class Camera
{
private IPAddress ip;
private string name;
public Camera(string name, IPAddress ip)
{
this.name = name;
this.ip = ip;
}
public string camera_name
{
get
{
return name;
}
}
public IPAddress camera_ip
{
get
{
return ip;
}
}
}
public MainForm()
{
InitializeComponent();
browser.StartBrowse("_rtsp._tcp");
lbMain.DataSource = all_cameras;
lbMain.DisplayMember = "camera_name";
lbMain.ValueMember = "camera_ip";
browser.ServiceAdded += (sender, args) =>
{
foreach (var cam_addr in args.Announcement.Addresses)
{
if (cam_addr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
Camera camera = new Camera("Camera " + cam_addr.ToString(), cam_addr);
all_cameras.Add(camera);
}
}
};
browser.ServiceRemoved += (sender, args) =>
{
foreach (var cam_ip in args.Announcement.Addresses)
{
if (cam_ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
foreach (var camera in all_cameras)
{
if (cam_ip == camera.camera_ip)
{
all_cameras.Remove(camera);
return;
}
}
}
}
};
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
browser.StopBrowse();
}
private void lbMain_MouseDoubleClick(object sender, MouseEventArgs e)
{
Form viewer = new StreamViewer(lbMain.GetItemText(lbMain.SelectedItem), lbMain.SelectedValue.ToString());
viewer.Show();
}
}
}