import v4 = require('uuid/v4'); import v5 = require("uuid/v5"); import { Socket } from 'socket.io'; import { Message, Types } from './server/Message'; import { Field } from './fields/Field'; import { TextField } from './fields/TextField'; import { NumberField } from './fields/NumberField'; import { RichTextField } from './fields/RichTextField'; import { Key } from './fields/Key'; import { ImageField } from './fields/ImageField'; import { ListField } from './fields/ListField'; import { Document } from './fields/Document'; import { Server } from './client/Server'; export class Utils { public static GenerateGuid(): string { return v4() // return new Buffer(v4()).toString("hex").substr(0, 24); } public static GenerateDeterministicGuid(seed: string): string { return v5(seed, v5.URL) // return new Buffer(v5(seed, v5.URL)).toString("hex").substr(0, 24); } public static GetScreenTransform(ele: HTMLElement): { scale: number, translateX: number, translateY: number } { const rect = ele.getBoundingClientRect(); const scale = ele.offsetWidth == 0 && rect.width == 0 ? 1 : rect.width / ele.offsetWidth; const translateX = rect.left; const translateY = rect.top; return { scale, translateX, translateY }; } public static Emit(socket: Socket | SocketIOClient.Socket, message: Message, args: T) { socket.emit(message.Message, args); } public static EmitCallback(socket: Socket | SocketIOClient.Socket, message: Message, args: T, fn: (args: any) => any) { socket.emit(message.Message, args, fn); } public static AddServerHandler(socket: Socket, message: Message, handler: (args: T) => any) { socket.on(message.Message, handler); } public static AddServerHandlerCallback(socket: Socket, message: Message, handler: (args: [T, (res: any) => any]) => any) { socket.on(message.Message, (arg: T, fn: (res: any) => any) => handler([arg, fn])); } }