This repository has been archived on 2024-09-16. You can view files and clone it, but cannot push or open issues or pull requests.

73 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-07-19 12:44:11 +03:00
import { writable } from "svelte/store";
import type { ConnectionState, ConnectionType } from "./types";
import {
ConnectEvent,
2024-07-22 00:00:01 +03:00
HeartbeatEvent,
2024-07-19 12:44:11 +03:00
NiimbotBluetoothClient,
NiimbotSerialClient,
2024-07-22 00:00:01 +03:00
// PacketParsedEvent,
2024-07-19 12:44:11 +03:00
RawPacketReceivedEvent,
RawPacketSentEvent,
Utils,
2024-07-22 00:00:01 +03:00
type HeartbeatData,
2024-07-19 12:44:11 +03:00
type NiimbotAbstractClient,
2024-07-23 00:00:01 +03:00
type PrinterConfig,
2024-07-19 12:44:11 +03:00
} from "@mmote/niimbluelib";
export const connectionState = writable<ConnectionState>("disconnected");
export const connectedPrinterName = writable<string>("");
export const printerClient = writable<NiimbotAbstractClient>();
2024-07-22 00:00:01 +03:00
export const heartbeatData = writable<HeartbeatData>();
2024-07-23 00:00:01 +03:00
export const printerConfig = writable<PrinterConfig>();
2024-07-19 12:44:11 +03:00
export const initClient = (connectionType: ConnectionType) => {
printerClient.update((prevClient: NiimbotAbstractClient) => {
let newClient: NiimbotAbstractClient = prevClient;
if (
prevClient === undefined ||
(connectionType !== "bluetooth" && prevClient instanceof NiimbotBluetoothClient) ||
(connectionType !== "serial" && prevClient instanceof NiimbotSerialClient)
) {
if (prevClient !== undefined) {
prevClient.disconnect();
}
if (connectionType === "bluetooth") {
console.log("new NiimbotBluetoothClient");
newClient = new NiimbotBluetoothClient();
} else {
console.log("new NiimbotSerialClient");
newClient = new NiimbotSerialClient();
}
newClient.addEventListener("rawpacketsent", (e: RawPacketSentEvent) => {
console.log(`>> ${Utils.bufToHex(e.data)}`);
});
newClient.addEventListener("rawpacketreceived", (e: RawPacketReceivedEvent) => {
console.log(`<< ${Utils.bufToHex(e.data)}`);
});
newClient.addEventListener("connect", (e: ConnectEvent) => {
console.log("onConnect");
connectionState.set("connected");
connectedPrinterName.set(e.info.deviceName ?? "unknown");
2024-07-28 00:00:01 +03:00
printerConfig.set(newClient.getPrinterInfo());
2024-07-19 12:44:11 +03:00
});
newClient.addEventListener("disconnect", () => {
console.log("onDisconnect");
connectionState.set("disconnected");
connectedPrinterName.set("");
2024-07-23 00:00:01 +03:00
printerConfig.set({});
2024-07-19 12:44:11 +03:00
});
2024-07-22 00:00:01 +03:00
newClient.addEventListener("heartbeat", (e: HeartbeatEvent) => {
heartbeatData.set(e.data);
});
2024-07-19 12:44:11 +03:00
}
return newClient;
});
};