/// <summary> /// Initializes a new instance of the broadcast client. /// </summary> /// <param name="port">Port.</param> public SocketBroadcastClient(int port) { this.port = port; try { var address = new IPEndPoint(IPAddress.Broadcast, port); mainSocket = new Socket(address.AddressFamily, SocketType.Dgram, ProtocolType.Udp); mainSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); mainSocket.Connect(address); messageQueue = new QueueWithBlock<byte[]>(); messagesThread = new Thread(MessagesThreadWork); messagesThread.IsBackground = true; messagesThread.Start(); } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } }
public static void TrySendMessage(string message) { if (messagesThread == null) { messagesThread = new Thread(MessagesThreadWork); messagesThread.IsBackground = true; messageQueue = new QueueWithBlock<string>(); messagesThread.Start(); } messageQueue.Enqueue(message); }
/// <summary> /// Raises the client state changed event. /// </summary> /// <param name="state">Client state.</param> protected void OnStateChanged(SocketClientState state) { this.state = state; if (state == SocketClientState.Disconnected) { if (messageQueue != null) { messageQueue.Release(); messageQueue = null; } messagesThread = null; } var handler = StateChanged; if (handler != null) { handler(this, state); } }
/// <summary> /// Sends the message. /// </summary> /// <param name="message">The byte array.</param> public void SendMessage(byte[] message) { if (messagesThread == null) { messagesThread = new Thread(MessagesThreadWork); messagesThread.IsBackground = true; messageQueue = new QueueWithBlock<byte[]>(); messagesThread.Start(); } messageQueue.Enqueue(message); }
public void Dispose() { lock (lockObject) { isDisposed = true; if (messageQueue != null) { messageQueue.Release(); messageQueue.Clear(); messageQueue = null; } if (mainSocket != null) { mainSocket.Close(); mainSocket.Dispose(); mainSocket = null; } messagesThread = null; } lockObject = null; }