Skip to content

Commit

Permalink
Merge pull request #5 from openirc/disjukr-patch-1
Browse files Browse the repository at this point in the history
다중 커넥션 및 이벤트 로그 관리를 위한 시퀀스 번호
  • Loading branch information
simnalamburt committed Apr 24, 2016
2 parents b4f2a3a + 85a4417 commit 3fbe5ce
Showing 1 changed file with 42 additions and 15 deletions.
57 changes: 42 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ OpenIRC protocol <sup>v0.0.0</sup>
OpenIRC에서 서버와 클라이언트가 어떤 것을 얼마나 어떻게 서로 주고받을지를 기술합니다.

이 문서에서 다뤄지는 json 및 메세지팩 데이터의 스키마는 [makise](https://github.com/disjukr/makise) 문법을 사용하여 기술됩니다.


### Table of contents
1. [방법](#1-방법)
2. [채팅 메세지 포맷](#2-채팅-메세지-포맷)
Expand All @@ -25,22 +28,47 @@ OpenIRC 서버는 OAuth를 사용한 인증과 이메일 인증 방식, 그리
**TODO**

#### 토큰 인증 절차
POST 메서드로 url은 `http://<OpenIRC 서버 주소>/login/`으로, 요청인자는 `{ "method": "token", "token": "<발급받은 토큰>" }`으로 호출하면 서버는 다음과 같은 json 객체를 응답합니다:
```json
{
"user": {
"name": "<사용자 대화명>"
},
"channels": [
"<채널이름1>",
"<채널이름2>",
"<채널이름3>",
"..."
],
"ws": "<웹소켓 연결 주소>"
POST 메서드로 url은 `http://<OpenIRC 서버 주소>/login/`으로, 요청인자는 `{ "method": "token", "token": "<발급받은 토큰>" }`으로 호출하면 서버는 다음과 같은 포맷의 json 객체를 응답합니다:
```makise
this is {
connections: [connection],
ws: url // 웹소켓 연결 주소
}
url is string
connection is {
name: string, // 오징어서버
url: string, // ocarina.irc.ozinger.org
port: int32, // 16667
ssl: boolean, // true
connid: int32, // 커넥션 id
seq: js_safe_int, // 시퀀스 번호
user: me, // 현재 사용자
channels: [channel]
}
channel is {
name: string, // 채널 이름
topic: string, // 채널 토픽
users: [user] // 채널에 접속한 유저 목록
}
user is {
nickname: string // 사용자 대화명
}
me is user and {
realname: string, // 사용자명
username: string, // 사용자 계정명
password: string // 사용자 비밀번호
}
```

커넥션마다 `seq`라는 시퀀스 번호가 들어있는데,
이 시퀀스 번호보다 작은 채팅 이벤트 로그는 커넥션의 상태를 조작하지 말라는 의미입니다.
여기서 커넥션의 상태란 채널 목록과 채널별 토픽 및 유저목록 등을 의미합니다.


### 채팅 메세지
[웹소켓](http://tools.ietf.org/html/rfc6455)을 통해서 데이터를 주고받습니다.
Expand All @@ -58,8 +86,6 @@ POST 메서드로 url은 `http://<OpenIRC 서버 주소>/login/`으로, 요청

주고받는 메세지 데이터는 무조건 `object` 형태여야 합니다.

이후로 작성되는 메세지 데이터 포맷은 [makise](https://github.com/disjukr/makise) 문법을 사용하여 기술됩니다.

서버는 클라이언트의 모든 요청에 대해서 응답을 해줄 의무가 있습니다.

클라이언트에서 서버로 보내는 모든 채팅 메세지는 요청 id(이하 `rid`)를 갖습니다.
Expand Down Expand Up @@ -144,6 +170,7 @@ message_kind is () // TODO
--------
```makise
target is {
connid: int32,
kind: ('channel', 'user'),
name: string
}
Expand Down

0 comments on commit 3fbe5ce

Please sign in to comment.