@ketch-in/packet
Version:
309 lines (233 loc) • 13.4 kB
Markdown
<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 | 공유 중인 상태인지 반환합니다. |