public static List<ClientManager> Vehicles; //public static List<ClientUpdateData> ClientFirmware; private static BackgroundWorker bwListener; private static TcpListener listenerSocket; /// <summary> /// Port used for connection /// </summary> public static Int32 Port; /// <summary> /// Flag used for connection /// </summary> public static bool Status; /// <summary> /// event handler ClientConnected /// </summary> public static event ConnectedEventHandler ClientConnected = delegate { }; /// <summary> /// event handler ClientDisconnected /// </summary> public static event DisconnectedEventHandler ClientDisConnected = delegate { }; /// <summary> /// event handler DataReceived /// </summary> public static event DataReceivedEventHandler DataReceived = delegate { }; /// <summary> /// event hanlder for notification /// </summary> public static event NotificationEventHandler OnNotificationReceived = delegate { }; /// <summary> /// Starts a background thread that listen for TCP connection /// </summary> /// <param name="port"></param> /// <param name="status"></param> public static void Start( String port, String status) { Port = Convert.ToInt32(port); // Port = 14126; Status = Convert.ToBoolean(status); if (Status) { Vehicles = new List<ClientManager>(); bwListener = new BackgroundWorker(); bwListener.WorkerSupportsCancellation = true; //background worker that listens to the devices bwListener.DoWork += new DoWorkEventHandler(StartToListen); bwListener.RunWorkerAsync(); } } /// <summary> /// No of vehicles connected /// </summary> public static Int32 VehicleCount { get { return Vehicles.Count; } } /// <summary> /// Starts a background thread that listens for a TCP connection /// </summary> public static void StartServer() { if (!Status) { bwListener = new BackgroundWorker(); bwListener.WorkerSupportsCancellation = true; //background worker that starts to listen for devices bwListener.DoWork += new DoWorkEventHandler(StartToListen); bwListener.RunWorkerAsync(); Status = true; } } /// <summary> /// Function that listens for the TCP connection and when connected creates a new client /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void StartToListen(object sender, DoWorkEventArgs e) { //starts listening to the specified port listenerSocket = new TcpListener(IPAddress.Any, Port); listenerSocket.Start(); while (Status) { if (!listenerSocket.Pending()) { Thread.Sleep(500); continue; } //creates a ClientManager object in case there is a device trying to connect to this port // CreateNewClientManager(listenerSocket.AcceptTcpClient()); // CreateNewClientManager(listenerSocket); listenerSocket.BeginAcceptTcpClient(AcceptTcpClientCallback, null); } } /// <summary> /// Creates a new client and assigns the event handlers /// </summary> /// <param name="socket"></param> private static void AcceptTcpClientCallback(IAsyncResult asyncResult) { TcpClient client = listenerSocket.EndAcceptTcpClient(asyncResult); listenerSocket.BeginAcceptTcpClient(AcceptTcpClientCallback, null); CreateNewClientManager(client); } private static void CreateNewClientManager(TcpClient socket) { //creates a object of ClientManager class and assign event handlers ClientManager newClientManager = new ClientManager(socket); newClientManager.CommandReceived += new PacketReceivedEventHandler(newPacketReceived); newClientManager.Disconnected += new DisconnectedEventHandler(ClientDisconnected); newClientManager.Connected += new ConnectedEventHandler(VehicleConnected); newClientManager.Notification +=new NotificationEventHandler(NotificationReceived); ClientConnected(null, new ClientEventArgs(newClientManager.Address, newClientManager.Address)); }
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)