/// <summary> /// Asynchronously changes the icon of AnyBar /// </summary> /// <param name="image"></param> /// <returns></returns> public async Task ChangeAsync(AnyBarImage image) { await _socket.SendToAsync( new ArraySegment <byte>(image.ToByteArray()), SocketFlags.None, _endPoint).ConfigureAwait(false); }
/// <summary> /// Synchronously changes the icon of AnyBar /// </summary> /// <param name="image"></param> public void Change(AnyBarImage image) { _socket.SendTo( image.ToByteArray(), SocketFlags.None, _endPoint); }
/// <summary> /// Asynchronously changes the icon of AnyBar /// </summary> /// <param name="image"></param> /// <returns></returns> public Task ChangeAsync(AnyBarImage image) { var tcs = new TaskCompletionSource <int>(_socket); var buffer = image.ToByteArray(); _socket.BeginSendTo(buffer, 0, buffer.Length, SocketFlags.Broadcast, _endPoint, iar => { var innerTcs = (TaskCompletionSource <int>)iar.AsyncState; try { innerTcs.TrySetResult(((Socket)innerTcs.Task.AsyncState).EndSendTo(iar)); } catch (Exception e) { innerTcs.TrySetException(e); } }, tcs); return(tcs.Task); }
public void SendReceiveTest(AnyBarImage color) { const int ackTimeout = 1000; const int testTimeout = 30000; var datagram = Encoding.UTF8.GetBytes(color.ToString().ToLowerInvariant()); var datagramSize = datagram.Length; var address = IPAddress.Loopback; var server = new Socket(address.AddressFamily, SocketType.Dgram, ProtocolType.Udp); var port = server.BindToAnonymousPort(address); var client = new AnyBarClient(address, port); var receiverAck = new ManualResetEventSlim(); var senderAck = new ManualResetEventSlim(); var serverThread = new Thread(() => { using (server) { var endpoint = (IPEndPoint)server.LocalEndPoint; var remote = endpoint.Create(endpoint.Serialize()); var recvBuffer = new byte[datagramSize]; int received = server.ReceiveFrom(recvBuffer, SocketFlags.None, ref remote); Assert.Equal(datagramSize, received); var receivedChecksums = Fletcher32.Checksum(recvBuffer, 0, received); receiverAck.Set(); Assert.True(senderAck.Wait(ackTimeout)); senderAck.Reset(); } }); serverThread.Start(); using (client) { client.Change(color); Assert.True(receiverAck.Wait(ackTimeout)); receiverAck.Reset(); senderAck.Set(); } Assert.True(serverThread.Join(testTimeout)); }
public static byte[] ToByteArray(this AnyBarImage self) { return(Encoding.UTF8.GetBytes(self.ToString().ToLowerInvariant())); }