diff --git a/server/server-route.ts b/server/server-route.ts index ec206f0..0ebaf1f 100755 --- a/server/server-route.ts +++ b/server/server-route.ts @@ -1,21 +1,6 @@ import { _post } from "lib/utils/post"; import { addRoute, createRouter, findRoute } from "rou3"; -import { ServerSession } from "./session/server-session"; -import { SessionData } from "./session/store/session-store"; - -export type ServerContext = { - req: Request; - handle: (req: Request) => Promise; - mode: "dev" | "prod"; - url: { - raw: URL; - pathname: string; - }; -}; - -export interface SessionContext extends ServerContext { - session: ServerSession; -} +import { ServerContext, SessionContext } from "./session/type"; type RouteFn = (...arg: any[]) => Promise; @@ -38,18 +23,22 @@ export const newServerRouter = < }; export const newClientRouter = >( - router: T + ...routers: T[] ) => { return new Proxy( {}, { get(target, api_name, receiver) { return (...args: any[]) => { - const [url, _, opt] = router[api_name as any]; - if (opt && opt.response_as) - return _post(url, args, { response_as: opt.response_as }); + for (const router of routers) { + if (router[api_name as any]) { + const [url, _, opt] = router[api_name as any]; + if (opt && opt.response_as) + return _post(url, args, { response_as: opt.response_as }); - return _post(url, args); + return _post(url, args); + } + } }; }, } diff --git a/server/session/client-session.ts b/server/session/client-session.ts index 9618548..46a8335 100755 --- a/server/session/client-session.ts +++ b/server/session/client-session.ts @@ -5,11 +5,10 @@ import { ClientSession } from "./type"; export const newClientSession = (arg?: { on: Partial<{ - session: ClientSession; - messageReceived: () => Promise; - afterLogin: () => Promise; - afterLogout: () => Promise; - afterRecheck: () => Promise; + messageReceived: (session: ClientSession) => Promise; + afterLogin: (session: ClientSession) => Promise; + afterLogout: (session: ClientSession) => Promise; + afterRecheck: (session: ClientSession) => Promise; }>; }) => { const store = sessionClientStore(); @@ -18,13 +17,23 @@ export const newClientSession = (arg?: { const session: ClientSession = { status: "checking", current: null, - async recheck() { - const current = await store.load(); - if (!current) { - this.status = "guest"; - } else { - this.status = await client.check(current.uid, current.sid); - } + async connect() { + const url = new URL(location.href); + url.protocol = "wss:"; + const ws = new WebSocket(url); + + ws.onopen = () => { + ws.send("ok"); + }; + ws.onmessage = (m) => { + console.log(m); + }; + // const current = await store.load(); + // if (!current) { + // this.status = "guest"; + // } else { + // this.status = await client.check(current.uid, current.sid); + // } return { status: this.status }; }, async login(arg: { @@ -35,9 +44,6 @@ export const newClientSession = (arg?: { async logout() {}, }; - session.recheck().then((e) => { - console.log(e); - }); - + session.connect(); return session; }; diff --git a/server/session/server-session.ts b/server/session/server-session.ts index fb595d0..eb8027f 100755 --- a/server/session/server-session.ts +++ b/server/session/server-session.ts @@ -1,8 +1,9 @@ /// -import { ServerContext, useServerRouter } from "../server-route"; +import { useServerRouter } from "../server-route"; import { sessionRouter } from "./router/session-router"; import { newSessionStore } from "./store/session-store"; +import { ServerContext } from "./type"; type SessionServerHandler = { cleanup: () => Promise; diff --git a/server/session/type.ts b/server/session/type.ts index 1e5233b..2980c0f 100755 --- a/server/session/type.ts +++ b/server/session/type.ts @@ -44,7 +44,7 @@ export type ClientSessionStatus = "checking" | "guest" | "expired" | "active"; export type ClientSession = { status: ClientSessionStatus; current: null | SessionData; - recheck(): Promise<{ status: ClientSessionStatus }>; + connect(): Promise<{ status: ClientSessionStatus }>; login(arg: { method: "user-pass"; username: string; @@ -52,3 +52,17 @@ export type ClientSession = { }): Promise; logout(): Promise; }; + +export interface SessionContext extends ServerContext { + session: ServerSession; +} + +export type ServerContext = { + req: Request; + handle: (req: Request) => Promise; + mode: "dev" | "prod"; + url: { + raw: URL; + pathname: string; + }; +};