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

import { writable } from "svelte/store";
import type { ConnectionState, ConnectionType } from "./types";
import {
ConnectEvent,
HeartbeatEvent,
NiimbotBluetoothClient,
NiimbotSerialClient,
// PacketParsedEvent,
RawPacketReceivedEvent,
RawPacketSentEvent,
Utils,
type HeartbeatData,
type NiimbotAbstractClient,
type PrinterConfig,
} from "@mmote/niimbluelib";
export const connectionState = writable<ConnectionState>("disconnected");
export const connectedPrinterName = writable<string>("");
export const printerClient = writable<NiimbotAbstractClient>();
export const heartbeatData = writable<HeartbeatData>();
export const printerConfig = writable<PrinterConfig>();
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");
printerConfig.set(newClient.getPrinterInfo());
});
newClient.addEventListener("disconnect", () => {
console.log("onDisconnect");
connectionState.set("disconnected");
connectedPrinterName.set("");
printerConfig.set({});
});
newClient.addEventListener("heartbeat", (e: HeartbeatEvent) => {
heartbeatData.set(e.data);
});
}
return newClient;
});
};