UNPKG

@ketch-in/packet

Version:
309 lines (233 loc) 13.4 kB
<h1 align="center">KETCH IN PACKET</h1> <p align="center"> <a href="./LICENSE"><img src="https://img.shields.io/npm/l/@ketch-in/packet?style=flat-square" title="license"/></a> <a href="https://www.npmjs.com/package/@ketch-in/packet"><img src="https://img.shields.io/npm/v/@ketch-in/packet?style=flat-square" title="npm-version"/></a> <br /> <a href="https://github.com/ketch-in/packet/actions/workflows/npm-publish.yml"><img src="https://github.com/ketch-in/packet/actions/workflows/npm-publish.yml/badge.svg" title="Deploy NPM Package"/></a> </p> <!-- omit in toc --> <details> <summary>목차</summary> - [1. TYPE](#1-type) - [1.1. User](#11-user) - [1.2. PayloadMap](#12-payloadmap) - [1.3. PayloadPen](#13-payloadpen) - [1.4. Connection](#14-connection) - [1.5. HostExtra](#15-hostextra) - [1.6. ExtensionExtra](#16-extensionextra) - [1.7. ThirdPartyExtra](#17-thirdpartyextra) - [1.8. ToolOptions](#18-tooloptions) - [2. EVENT](#2-event) - [2.1. onDisconnect](#21-ondisconnect) - [2.2. onError](#22-onerror) - [2.3. onNotSupportMessage](#23-onnotsupportmessage) - [2.4. onDraw](#24-ondraw) - [2.5. onChangeUsers](#25-onchangeusers) - [2.6. onStoppedShared](#26-onstoppedshared) - [3. METHOD](#3-method) - [3.1. getUser](#31-getuser) - [3.2. getTool](#32-gettool) - [3.3. getVideoId](#33-getvideoid) - [3.4. draw](#34-draw) - [3.5. destroy](#35-destroy) - [4. VARIABLE](#4-variable) </details> ## Example <!-- omit in toc --> ```js import Packet from "ketch-in-packet"; try { const packet = new Packet<"host">({ name:"test-host". extra: { type: "host" active: false, sharedType: "screen", extensionId: "eb540ba7-9496-4779-a610-0b33c847384e", sharedScreen: 4, }, meetId: "abc-abcd-abc", version: "0.0.1", signalingUrl: "https://domain.example.com/", }); packet.addEventListener("onDraw", (obj, payload, from) => { if(!그리기허용){ return; } const { user, extra } = from; if (extra.type !== 'extension' && extra.type !== 'thirdParty') { return; } if (payload.type === 'pen') { const [x, y, w, h, type] = payload.data; ... buffer(user.id, type, x, y, extra.tool.color); ... } }); packet.addEventListener("onChangeUsers", (obj, type, from)=>{ if(type === "exit"){ const connectedUserSize = obj.length // 접속한 사람 수 업데이트 } }) } catch (e) { console.log(e) } ``` ## 1. TYPE ### 1.1. User | name | type | description | | ------- | ---------------------------------------------------- | ------------------------------------ | | id | string | packet의 고유 식별자를 나타냅니다. | | name | string | 사용자 이름을 나타냅니다. | | status | "대기" / "그리는 중" / "그리기 허용" / "그리기 잠금" | 사용자의 상태를 나타냅니다. | | version | string | 사용자가 사용하는 버전을 나타냅니다. | ### 1.2. PayloadMap | name | type | description | | ---- | ---------------------------- | -------------------- | | pen | [PayloadPen](#13-payloadpen) | 그리기 데이터입니다. | ### 1.3. PayloadPen | name | type | description | | ---- | ---------------------------------------------------------- | --------------------------------------- | | type | "pen" | 그리기 유형을 지정합니다. | | data | [number, number, number, number, "up" or "down" or "move"] | 그리기 유형에 따른 데이터를 지정합니다. | ### 1.4. Connection | name | type | description | | ----- | --------------------------------------------------------------------------------------------------------- | --------------------------- | | user | [User](#11-user) | 사용자 정보를 나타냅니다. | | extra | [HostExtra](#15-hostextra) / [ExtensionExtra](#16-extensionextra) /[ThirdPartyExtra](#17-thirdpartyextra) | 사용자 데이터를 나타냅니다. | ### 1.5. HostExtra | name | type | description | | ------------ | ------- | ---------------------------------------------------- | | extensionId | string | 익스텐션 사용자 ID (host 소유자) | | type | "host" | payload type | | active | boolean | 그리기 허용 여부 | | sharedType | string | 발표 유형 (전체화면, 창, 브라우저...) | | sharedScreen | number | 발표 스크린 번호 (SharedType이 전체화면일 경우 존재) | ### 1.6. ExtensionExtra | name | type | description | | ------------------ | ------------------------------ | --------------------------------- | | tool | [ToolOptions](#18-tooloptions) | 그리기 도구 옵션 | | type | "extension" | payload type | | hostId | string | 발표 영상 ID (ex, spaces/...) | | dataParticipantId? | string | 사용자의 영상 ID (ex, spaces/...) | ### 1.7. ThirdPartyExtra | name | type | description | | ----------- | ------------------------------ | -------------------------- | | tool | [ToolOptions](#18-tooloptions) | 그리기 도구 옵션 | | type | "thirdParty" | payload type | | extensionId | string | extension의 사용자 식별 ID | ### 1.8. ToolOptions | name | type | description | | ----- | ------ | -------------- | | color | string | 그리기 색 지정 | ## 2. EVENT ### 2.1. onDisconnect 서버와 Connection이 끊겼을 경우 발생합니다. 발생시, WebRTC 연결도 끊기게 됩니다. ```ts const defaultPacket = new Pack({...}); defaultPacket.addEventListener("onDisconnect", (packet:Packet)=>{}); ``` ### 2.2. onError Connection 과정 중 에러가 발생했을 때 호출하게 됩니다. ```ts const defaultPacket = new Pack({...}); defaultPacket.addEventListener("onError", (packet:Packet, errorName:ErrorName, ...args:any[])=>{}); ``` ### 2.3. onNotSupportMessage 지정된 메시지가 아닌 새로운 메시지가 나왔을 때 발생합니다. 버전 차이가 있을 경우 발생할 수 있습니다. ```ts const defaultPacket = new Pack({...}); defaultPacket.addEventListener("onNotSupportMessage", (packet:Packet, message:Message)=>{}); ``` ### 2.4. onDraw > Host인 경우에만 수신합니다. 그리기 요청이 있을 경우 발생합니다. ```ts const defaultPacket = new Pack({...}); defaultPacket.addEventListener("onDraw", (packet:Packet, data:any, from:Connection)=>{}); ``` ### 2.5. onChangeUsers 특정 사용자의 상태가 변경되었을 경우 발생합니다. 새로운 참여, 나가기, 상태 수정, 이름 수정, 도구 상태 변경 등 전반적인 상태 변경에서 호출됩니다. ```ts const defaultPacket = new Pack({...}); defaultPacket.addEventListener("onChangeUsers", (packet:Packet, type:"join"|"exit"|"update", from:Connection)=>{}); ``` ### 2.6. onStoppedShared > Host인 경우에만 수신합니다. > > Host를 실행한 extension에서 넘어온 메시지에 대해서만 수신 발표중인 사용자가 발표를 중단했을 때 발생합니다. ```ts const defaultPacket = new Pack({...}); defaultPacket.addEventListener("onStoppedShared", (packet:Packet)=>{}); ``` ## 3. METHOD ### 3.1. getUser id에 해당하는 유저 정보를 반환합니다. | input | Description | | ------------ | ----------------------------------- | | id: `string` | 필요한 유저 정보의 ID를 나타냅니다. | | output | Description | | ---------------------------- | ------------------------- | | userInfo: [`User`](#11-user) | 사용자 정보를 나태냅니다. | ```ts const defaultPacket = new Pack({...}); defaultPacket.getUser("...") ``` ### 3.2. getTool id에 해당하는 유저의 tool를 반환합니다. | input | Description | | ------------ | ----------------------------------- | | id: `string` | 필요한 유저 정보의 ID를 나타냅니다. | | output | Description | | --------------------------------------------- | ------------------------------ | | toolOptions: [`ToolOptions`](#18-tooloptions) | 해당 사용자의 값을 반환합니다. | ```ts const defaultPacket = new Pack({...}); defaultPacket.getTool("...") ``` ### 3.3. getVideoId 사용자 ID에 해당하는 비디오 ID를 반환합니다. `isHost`값이 `true`인 경우, 발표 비디오 ID를 반환합니다. | input | Description | | ----------------- | ------------------------------------------------ | | id: `string` | video ID를 찾고자 하는 사용자 ID를 입력합니다. | | isHost: `boolean` | 발표자 video를 찾고자 할 경우 true로 지정합니다. | | output | Description | | ----------------- | ---------------------- | | videoId: `string` | video ID를 반환합니다. | ```ts const defaultPacket = new Pack({...}); defaultPacket.getVideoId() ``` ### 3.4. draw 그리기를 요청합니다. | input | Description | | ----------------------------------- | ------------------------------------------------------- | | payload: [`Painting`](#12-painting) | 그리기 정보를 입력합니다. | | target: `string` | 그리기 정보를 보낼 사용자(`Host 한정`) ID를 입력합니다. | ```ts const defaultPacket = new Pack({...}); defaultPacket.draw() ``` ### 3.5. destroy 모든 연결을 끊고 이벤트를 종료합니다. ```ts const defaultPacket = new Pack({...}); defaultPacket.destroy() ``` ## 4. VARIABLE | name | method | type (set : params, get : returns) | description | | --------------------- | ------ | --------------------------------------------------------------------------------------------------------- | --------------------------------------------- | | status | set | STATUS_TEXT | 사용자의 상태를 수정할 때 사용합니다. | | payload | set | [HostExtra](#15-hostextra) / [ExtensionExtra](#16-extensionextra) /[ThirdPartyExtra](#17-thirdpartyextra) | 사용자의 옵션을 업데이트합니다. | | payload | get | [HostExtra](#15-hostextra) / [ExtensionExtra](#16-extensionextra) /[ThirdPartyExtra](#17-thirdpartyextra) | 사용자의 옵션을 반환합니다. | | id | get | string | 사용자의 ID를 반환합니다. | | type | get | string | 사용자의 유형을 반환합니다. | | version | get | string | 사용자가 사용하는 버전을 반환합니다. | | length | get | number | 접속 중인 "사람" 수만 반환합니다. | | lowerExtensionVersion | get | string | 익스텐션 버전 중 가장 낮은 버전을 반환합니다. | | users | get | [`User`](#11-user)[] | 접속하고 있는 모든 사용자를 반환합니다. | | hostUsers | get | [`User`](#11-user) | 접속하고 있는 호스트 사용자만 반환합니다. | | isShared | get | boolean | 공유 중인 상태인지 반환합니다. |