From c6a27d62900fabaa587957db8fde7f09b75c8e31 Mon Sep 17 00:00:00 2001 From: Wetiontop Date: Mon, 20 Dec 2021 18:51:51 +0800 Subject: [PATCH 1/2] Squashed commit of the following: commit ed409795d96c5a1461d4f3e6560342eadb1c0e23 Author: k8w Date: Tue Dec 14 23:22:13 2021 +0800 wechat commit 78a481489d48cfb7603e9c8f6af23cce12ae117f Author: k8w Date: Tue Dec 14 23:22:07 2021 +0800 wechat commit 5e7a5782abb869bb21409704da572eeae0d309d9 Author: k8w Date: Tue Dec 14 23:20:38 2021 +0800 update wechat code --- examples/cocos-creator-multiplayer/README.md | 19 +++++++++--------- .../README_assets/wechat.png | Bin 14043 -> 31098 bytes 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/examples/cocos-creator-multiplayer/README.md b/examples/cocos-creator-multiplayer/README.md index 174896a..df692f6 100644 --- a/examples/cocos-creator-multiplayer/README.md +++ b/examples/cocos-creator-multiplayer/README.md @@ -10,8 +10,15 @@ https://tsrpc.cn/fight/index.html (可浏览器多开体验多人效果) -**在线教程** -https://1drv.ms/p/s!AviSVsaYsolWnh7DCp2Y8g_NtDbA?e=67ZqqS +## 在线教程 +- 文章: + - [2 天做了个多人实时对战,200ms 延迟竟然也能丝滑流畅?](https://mp.weixin.qq.com/s/V1YWPF5LmY-l1L5LF2nR3A) +- 视频: + - [2021-12-04 Cocos Star Meeting 深圳站](https://www.bilibili.com/video/BV16F411z7iP) +- Github 源码地址 + - https://github.com/k8w/tsrpc-examples/tree/main/examples/cocos-creator-multiplayer + +![](README_assets/wechat.png) @@ -42,14 +49,6 @@ npm run dev **注意:前端项目需要先 `npm install` 后再打开 Cocos,如果报错,可以关闭 Cocos 后重启试一下。** -## 微信交流群 - -欢迎加入 TSRPC 和 TypeScript 全栈开发学习交流群: - -(请注明来意) - -![](README_assets/wechat.png) - ## 效果预览 https://user-images.githubusercontent.com/1681689/144695691-c8c556dd-68c4-44bf-8a38-5c37e203dbda.mp4 \ No newline at end of file diff --git a/examples/cocos-creator-multiplayer/README_assets/wechat.png b/examples/cocos-creator-multiplayer/README_assets/wechat.png index f0f7a30788cd2de4691068e32c1de68ef079e0b6..0e5c24dff79dac48d9aa3ef1acb586ffc76f055b 100644 GIT binary patch literal 31098 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 literal 14043 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 Date: Sun, 26 Dec 2021 18:15:38 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8Duser-authenication?= =?UTF-8?q?=E6=A1=88=E4=BE=8BCurrentUser=E4=B8=8D=E5=9C=A8shared=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9=E5=AF=BC=E8=87=B4=E5=89=8D=E7=AB=AFPtlLogin.?= =?UTF-8?q?ts=E5=BC=95=E7=94=A8=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/user-authentication/backend/src/models/UserUtil.ts | 2 +- .../backend/src/models/parseCurrentUser.ts | 2 +- .../backend/src/{ => shared}/models/CurrentUser.ts | 0 .../backend/src/shared/protocols/serviceProto.ts | 6 +++--- .../backend/src/shared/protocols/user/PtlLogin.ts | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) rename examples/user-authentication/backend/src/{ => shared}/models/CurrentUser.ts (100%) diff --git a/examples/user-authentication/backend/src/models/UserUtil.ts b/examples/user-authentication/backend/src/models/UserUtil.ts index 6732ada..f7d1b1e 100644 --- a/examples/user-authentication/backend/src/models/UserUtil.ts +++ b/examples/user-authentication/backend/src/models/UserUtil.ts @@ -1,5 +1,5 @@ import * as uuid from "uuid"; -import { CurrentUser } from "./CurrentUser"; +import { CurrentUser } from "../shared/models/CurrentUser"; const SSO_VALID_TIME = 86400000 * 7; diff --git a/examples/user-authentication/backend/src/models/parseCurrentUser.ts b/examples/user-authentication/backend/src/models/parseCurrentUser.ts index b5f561e..72c9c2b 100644 --- a/examples/user-authentication/backend/src/models/parseCurrentUser.ts +++ b/examples/user-authentication/backend/src/models/parseCurrentUser.ts @@ -1,6 +1,6 @@ import { HttpServer } from "tsrpc"; import { BaseRequest } from "../shared/protocols/base"; -import { CurrentUser } from "./CurrentUser"; +import { CurrentUser } from "../shared/models/CurrentUser"; import { UserUtil } from "./UserUtil"; export function parseCurrentUser(server: HttpServer) { diff --git a/examples/user-authentication/backend/src/models/CurrentUser.ts b/examples/user-authentication/backend/src/shared/models/CurrentUser.ts similarity index 100% rename from examples/user-authentication/backend/src/models/CurrentUser.ts rename to examples/user-authentication/backend/src/shared/models/CurrentUser.ts diff --git a/examples/user-authentication/backend/src/shared/protocols/serviceProto.ts b/examples/user-authentication/backend/src/shared/protocols/serviceProto.ts index b522c5d..fe4cfc2 100644 --- a/examples/user-authentication/backend/src/shared/protocols/serviceProto.ts +++ b/examples/user-authentication/backend/src/shared/protocols/serviceProto.ts @@ -34,7 +34,7 @@ export interface ServiceType { } export const serviceProto: ServiceProto = { - "version": 3, + "version": 4, "services": [ { "id": 0, @@ -254,12 +254,12 @@ export const serviceProto: ServiceProto = { "name": "user", "type": { "type": "Reference", - "target": "../../models/CurrentUser/CurrentUser" + "target": "../models/CurrentUser/CurrentUser" } } ] }, - "../../models/CurrentUser/CurrentUser": { + "../models/CurrentUser/CurrentUser": { "type": "Interface", "properties": [ { diff --git a/examples/user-authentication/backend/src/shared/protocols/user/PtlLogin.ts b/examples/user-authentication/backend/src/shared/protocols/user/PtlLogin.ts index 753fe23..a1b53b2 100644 --- a/examples/user-authentication/backend/src/shared/protocols/user/PtlLogin.ts +++ b/examples/user-authentication/backend/src/shared/protocols/user/PtlLogin.ts @@ -1,4 +1,4 @@ -import { CurrentUser } from '../../../models/CurrentUser'; +import { CurrentUser } from '../../models/CurrentUser'; import { BaseConf, BaseRequest, BaseResponse } from '../base'; export interface ReqLogin extends BaseRequest {