示例#1
0
文件: Program.cs 项目: lypvc/test1
        private static async Task Receive(ClientWebSocket webSocket)
        {
            while (webSocket.State == WebSocketState.Open)
            {
                try
                {
                    IMessage message = await MessageHelper.ReceiveMessage(webSocket);

                    if (message != null)
                    {
                        switch (message.MessageType)
                        {
                        case MessageEnum.Heartbeat:
                            Heartbeat heartbeat = message as Heartbeat;
                            if (heartbeat != null)
                            {
                                Console.WriteLine("Receive Heartbeat");
                            }
                            break;

                        case MessageEnum.Temperature:
                            Temperature temp = message as Temperature;
                            if (temp != null)
                            {
                                Console.WriteLine($"Receive Temperature: {temp.Value}");
                                if (temp.Value > 90.0)
                                {
                                    queue.Enqueue(new LEDMessage(12, LEDState.On));
                                }
                            }
                            break;

                        case MessageEnum.LED:
                            LEDMessage led = message as LEDMessage;
                            if (led != null)
                            {
                                Console.WriteLine($"Receive LED [Pin: {led.Pin}  State: {led.State}]");
                            }
                            break;
                        }
                    }
                    else
                    {
                        await webSocket.CloseAsync(WebSocketCloseStatus.InvalidMessageType, "expected binary", CancellationToken.None);

                        return;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
示例#2
0
        private async Task SendReceiveLoop(WebSocket webSocket)
        {
            try
            {
                while (webSocket.State == WebSocketState.Open)
                {
                    IMessage receiveMessage = await MessageHelper.ReceiveMessage(webSocket);

                    if (receiveMessage != null)
                    {
                        switch (receiveMessage.MessageType)
                        {
                        case MessageEnum.Heartbeat:
                            queue.Enqueue(receiveMessage);
                            TraceLine(DateTime.Now.ToString("HH:mm:ss.ffff") + " Heartbeat");
                            break;

                        case MessageEnum.LED:
                            LEDMessage led = receiveMessage as LEDMessage;
                            if (led != null)
                            {
                                if (currentTemperature > 90.0)
                                {
                                    queue.Enqueue(led);
                                    currentTemperature = 70.0;
                                    TraceLine(DateTime.Now.ToString("HH:mm:ss.ffff") + $" LEDMessage: [{led.Pin} {led.State}]");
                                }
                            }
                            break;
                        }
                    }

                    IMessage sendMessage;
                    while (queue.TryDequeue(out sendMessage))
                    {
                        await MessageHelper.SendMessage(webSocket, sendMessage);
                    }
                }
            }
            catch (Exception ex)
            {
                TraceLine(ex.Message);
            }
        }
示例#3
0
        /// <summary>
        /// Sets the messages on the badge
        /// </summary>
        /// <param name="messages">An Array of up to 6 messages to set</param>
        public void SetMessages(LEDMessage[] messages)
        {
            byte[] badgeBytes = null;
            using (MemoryStream bytePattern = new MemoryStream())
            {
                //write the start byte
                bytePattern.WriteByte(StartByte);

                //get number of messages to process
                int numMsgs = 6;
                if (messages.Length < numMsgs)
                    numMsgs = messages.Length;

                //messages enabled flag
                uint msgCount = 0x00;

                //get the byte pattern foreach message
                for (int m = 0; m < numMsgs; m++)
                {
                    byte[] badgeMsg = CreateMessageBytePattern(messages[m].Message, m, messages[m].Style, messages[m].Speed);
                    bytePattern.Write(badgeMsg, 0, badgeMsg.Length);

                    msgCount += msgCount + 0x01;
                }

                //write end byte pattern
                bytePattern.WriteByte(ControlByteOne);
                bytePattern.WriteByte(ControlByteThree);
                bytePattern.WriteByte((byte)msgCount);

                //get final byte pattern
                badgeBytes = bytePattern.ToArray();
            }

            //write bytes to the badge
            this.WriteBytes(badgeBytes);
        }
示例#4
0
 /// <summary>
 /// Sets an message on the badge
 /// </summary>
 /// <param name="message">An LEDMessage containing the message to set</param>
 public void SetMessage(LEDMessage message)
 {
     this.SetMessages(new LEDMessage[] { message });
 }