73 lines
2.3 KiB
TypeScript
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;
|
|
});
|
|
};
|