67 lines
2.1 KiB
TypeScript
67 lines
2.1 KiB
TypeScript
|
import { writable } from "svelte/store";
|
||
|
import type { ConnectionState, ConnectionType } from "./types";
|
||
|
import {
|
||
|
ConnectEvent,
|
||
|
NiimbotBluetoothClient,
|
||
|
NiimbotSerialClient,
|
||
|
PacketParsedEvent,
|
||
|
RawPacketReceivedEvent,
|
||
|
RawPacketSentEvent,
|
||
|
Utils,
|
||
|
type NiimbotAbstractClient,
|
||
|
} from "@mmote/niimbluelib";
|
||
|
|
||
|
export const connectionState = writable<ConnectionState>("disconnected");
|
||
|
export const connectedPrinterName = writable<string>("");
|
||
|
export const printerClient = writable<NiimbotAbstractClient>();
|
||
|
|
||
|
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("packetparsed", (e: PacketParsedEvent) => {
|
||
|
console.log(e.packet);
|
||
|
});
|
||
|
|
||
|
newClient.addEventListener("connect", (e: ConnectEvent) => {
|
||
|
console.log("onConnect");
|
||
|
connectionState.set("connected");
|
||
|
connectedPrinterName.set(e.info.deviceName ?? "unknown");
|
||
|
// c.sendPacket(PacketGenerator.setBtSound(false));
|
||
|
});
|
||
|
|
||
|
newClient.addEventListener("disconnect", () => {
|
||
|
console.log("onDisconnect");
|
||
|
connectionState.set("disconnected");
|
||
|
connectedPrinterName.set("");
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return newClient;
|
||
|
});
|
||
|
};
|