Пример #1
0
 /// <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);
 }
Пример #2
0
 /// <summary>
 /// Synchronously changes the icon of  AnyBar
 /// </summary>
 /// <param name="image"></param>
 public void Change(AnyBarImage image)
 {
     _socket.SendTo(
         image.ToByteArray(),
         SocketFlags.None,
         _endPoint);
 }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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));
        }
Пример #5
0
 public static byte[] ToByteArray(this AnyBarImage self)
 {
     return(Encoding.UTF8.GetBytes(self.ToString().ToLowerInvariant()));
 }