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); } } }
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); } }
/// <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); }
/// <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 }); }