import { useState, useEffect } from "react"; import mqtt from "mqtt"; import { TextSection } from "@components/index"; import styled from "styled-components"; const CoffeeTitle = styled.div` display: flex; flex-direction: column; justify-content: center; align-items: center; font-size: 3rem; font-weight: bold; `; const Cups = styled.div` display: flex; flex-direction: column; justify-content: center; align-items: center; font-size: 7rem; font-variant-numeric: tabular-nums; `; const Time = styled.div` display: flex; flex-direction: column; justify-content: center; align-items: center; font-size: 1rem; `; const GuildroomView = () => { const [brewing, setBrewing] = useState(false); const [time, setTime] = useState(0); const [cups, setCups] = useState(0); const [client, setClient] = useState(null); const [status, setStatus] = useState(false); useEffect(() => { setStatus(false); if (process.env.NEXT_PUBLIC_MQTT_HOST) { setClient(mqtt.connect(`ws://${process.env.NEXT_PUBLIC_MQTT_HOST}`)); } }, []); useEffect(() => { if (client) { client.on("connect", () => { setStatus(true); client.subscribe("sik/kiltahuone/kahvivaaka/#", (err) => { if (!err) { console.log("Connected to MQTT server!"); } }); }); client.on("error", (err) => { console.error("Connection error: ", err); client.end(); }); client.on("reconnect", () => { setStatus(false); }); client.on("offline", () => { setStatus(false); }); client.on("message", (topic, message) => { if (topic === "sik/kiltahuone/kahvivaaka/cups") { setCups(Number(message.toString())); } if (topic === "sik/kiltahuone/kahvivaaka/brewtime") { setTime(Number(message.toString())); } if (topic === "sik/kiltahuone/kahvivaaka/brewing") { setBrewing(Boolean(message.toString())); } }); } }, [client]); if (!status) { return ( NO MQTT CONNECTION ); } return (
{brewing ? "Brewing more..." : "Cups left"} {cups}
); }; export default GuildroomView;