차례

  1. 개요
  2. SHIORI/2.x 의 인터페이스
    1. SHIORI/2.0
      1. 참고: GET과 NOTIFY의 차이점
      2. GET Version
      3. NOTIFY OwnerGhostName
      4. GET Sentence
      5. GET Word
      6. GET Status
      7. 반응
    2. SHIORI/2.1
    3. SHIORI/2.2
      1. 본체 통지 이벤트
        1. 타이밍 통지 이벤트
          1. OnFirstBoot
          2. OnWindowStateMinimize
          3. OnWindowStateRestore
          4. OnBoot
          5. OnClose
          6. OnTeachStart
        2. 변환 이벤트
          1. OnGhostChanging
          2. OnGhostChanged
          3. OnShellChanging
          4. OnShellChanged
        3. 소멸 이벤트
          1. OnVanishSelecting
          2. OnVanishSelected
          3. OnVanishCancel
          4. OnVanishButtonHold
          5. OnVanished
        4. 시간 이벤트
          1. OnSecondChange
          2. OnMinuteChange
          3. 시간 이벤트의 인수 (공통)
        5. 표면 이벤트
          1. OnSurfaceChange
          2. OnSurfaceRestore
        6. 마우스/키보드 이벤트
          1. OnMouseMove
          2. OnMouseClick
          3. OnMouseDoubleClick
          4. OnMouseWheel
          5. 마우스 이벤트의 인수 (공통)
          6. OnKeyPress
        7. 인스톨 이벤트
          1. OnInstallBegin
          2. OnInstallComplete
          3. OnInstallFailure
          4. OnInstallRefuse
        8. 드롭 이벤트
          1. OnFileDropping
          2. OnFileDropped
          3. OnDirectoryDrop
          4. OnWallpaperChange
          5. 파일드롭 이벤트의 인수 (공통)
          6. OnURLDropping
          7. OnURLDropped
        9. BIFF 이벤트 (메일 관련)
          1. OnBIFFBegin
          2. OnBIFFComplete
          3. OnBIFF2Complete
          4. OnBIFFFailure
        10. 갱신 이벤트
          1. OnUpdateBegin
          2. OnUpdateReady
          3. OnUpdateComplete
          4. OnUpdateFailure
          5. OnUpdate.OnDownloadBegin
          6. OnUpdate.OnMD5CompareBegin
          7. OnUpdate.OnMD5CompareComplete
          8. OnUpdate.OnMD5CompareFailure
        11. SNTP 이벤트 (시각 맞춤 관련)
          1. OnSNTPBegin
          2. OnSNTPCompare
          3. OnSNTPCorrect
          4. OnSNTPFailure
        12. 헤드라인 센스 이벤트
          1. OnHeadlinesenseBegin
          2. OnHeadlinesense.OnFind
          3. OnHeadlinesenseComplete
          4. OnHeadlinesenseFailure
        13. 노래 이벤트
          1. OnMusicPlay
        14. 선택지 이벤트
          1. OnChoiceSelect
          2. OnChoiceTimeout
        15. 예외(에러) 이벤트
          1. OnSSTPBreak
        16. 마스터 이벤트
          1. OnUpdatedataCreating
          2. OnUpdatedataCreated
          3. OnNarCreating
          4. OnNarCreated
        17. 분류 불가
          1. OnNetworkHeavy
          2. OnDisplayChange
          3. OnSSTPBlacklisting
          4. OnRecommendsiteChoice
      2. 외부 어플리케이션 범용 이벤트
      3. 버섯(키노코) 이벤트
      4. 고양이(네코도리후)이벤트
      5. Reference 의 수에 대하여
    4. SHIORI/2.3b
      1. NOTIFY OwnerGhostName
      2. NOTIFY OtherGhostName
        1. 반응시의 To/Age/Reference 헤더
      3. GET Sentence
    5. SHIORI/2.4
      1. TEACH
        1. 311 Not Enough
        2. 200 OK
        3. 312 Advice
    6. SHIORI/2.5
      1. GET String
        1. ID 헤더
          1. homeurl
          2. sakura.recommendsites
          3. kero.recommendsites
          4. sakura.portalsites
          5. buttoncaption 계열
          6. vanishbuttonvisible
          7. username
          8. defaultleft 계열
  3. 보안
  4. 스테이터스 코드
  5. 앨리어스(alias)

개요

ShioriGhost의 핵심적 요소이고, 이 부분의 처리 여부가 인격의 거의 모두가 된다.

home
 +-ghost
    +-naru
       +-ghost
          +-master
             +-shiori.dll

SHIORI/2.x 의 인터페이스

SHIORI/2.0 은 2.x 계의 기초적인 프로토콜을 정의 한다.

인수/반환값의 수수는 모두 Global Memory 로 한다. GMEM_FIXED 로 데이터를 받아, 메모리 핸들을 Free 시키고, 데이터의 길이를 len 을 사용하여 데이터를 취득, 반환값 작성 후 len 에 적정인 값을 다시 넣어, GMEM_FIXED 로 돌려준다.

{{{ * 함수 선언 extern "C" declspec(dllexport) HGLOBAL cdecl request(HGLOBAL h, long *len); function request(h: hglobal; var len: longint): hglobal; cdecl; export; }}}

모든 리퀘스트는 request 라고 하는 유일한 함수를 통해 행해진다.

리퀘스트 헤더는 HTTP 나 SSTP 의 형식과 거의 동일하다. 모든 행은 CR+LF 로 구분되어 1행째에 명령과 버전, 2행 이후에 임의의 수의 헤더가 배치되어 최종적으로 CR+LF 2개로 종료된다.

DLL 로드시 및 언로드시에 다음의 함수가 불려진다.

extern "C" __declspec(dllexport) BOOL __cdecl load(HGLOBAL h, long len);
function load(h: hglobal; len: longint): boolean; cdecl;

extern "C" __declspec(dllexport) BOOL __cdecl unload();
function unload: boolean; cdecl;

load 의 제1 인수에 DLL 의 디렉토리 경로를 건네받는다. Shiori 가 고유의 데이터 파일등을 가지는 경우는, 여기에서 현재의 디렉토리를 취득해, 그곳에서 자신의 데이터 파일을 읽어들여야 한다.

캐릭터 라인이 필요없는 경우에서도 함수내에서 핸들을 Free시키지 않으면 안 된다.

load 가 성공할 경우 Shiori 는 TRUE 를, load 가 실패할 경우 Shiori 는 FALSE 를 돌려주어야 한다.

SHIORI/2.0

참고: GET과 NOTIFY의 차이점

GET은 클라이언트 (본체)가 Shiori로부터 정보를 필요로 할 때 사용되며, Shiori는 그에 해당하는 정보를 돌려주거나 필요가 없을 경우 정보가 없다고 알려주어야 한다. NOTIFY는 클라이언트가 Shiori에게 무언가를 알려 주려 할 때 사용되며, Shiori는 클라이언트에게 스테이터스 코드 이외의 어떤 것도 보내주면 안 된다.

GET Version

GET Version SHIORI/2.0
Sender: Nobody
Charset: Shift_JIS

----

SHIORI/2.0 200 OK

클라이언트는 여기서 얻은 버전 정보를 사용하여(필요가 있으면) 리퀘스트의 레벨을 변화 시킨다. (주: 여기서 Shiori가 처리가능한 SHIORI/2.x 리퀘스트의 최대 버전을 알려주어야 한다. 일례로 SHIORI/2.5 까지 가능하다면 SHIORI/2.5 200 OK으로. 예전에는 GET Version 리퀘스트만은 load/unload가 불리기 전에도 처리가능해야만 하다는 내용이 있었던 것 같은데..)

NOTIFY OwnerGhostName

NOTIFY OwnerGhostName SHIORI/2.0
Sender: Nobody
Ghost: 사쿠라
Charset: Shift_JIS

----

SHIORI/2.0 200 OK

클라이언트가 서버에 일방적으로 정보를 통지하는 리퀘스트가 NOTIFY 이다. 2.0 에서는 NOTIFY OwnerGhostName이 사용되고 있다.

인수

GET Sentence

GET Sentence SHIORI/2.0
Sender: User
Charset: Shift_JIS
Sentence: 안녕.

----

SHIORI/2.0 200 OK
Sender: First
BalloonOffset: 0,0[1]0,0
Sentence: \0\s0안녕. \e

인수

클라이언트가 서버에 스크립트를 요구하는 리퀘스트가 GET Sentence 이다. 이것은 기본적으로 「누군가가 이야기 해 왔다」라는 것을 나타낸다. SHIORI/2.0 에서는 User 로부터의 GET Sentence 가 실장되어 있다.

GET Word

GET Word SHIORI/2.0
Sender: materia
Type: \ms
Charset: Shift_JIS

---

SHIORI/2.0 200 OK
Word: 사쿠라

클라이언트가 서버에 단어(스크립트의 단편)를 요구하는 리퀘스트가 GET Word 이다.

인수

Type 헤더에 건넬 수 있는 캐릭터 라인은 다음과 같습니다.

GET Status

GET Status SHIORI/2.0
Sender: Nobody
Charset: Shift_JIS

---

SHIORI/2.0 200 OK
Status: 0,0,0,0,0,0

클라이언트가 서버에 고스트의 현재 정보를 요구하는 리퀘스트가 GET Status 입니다.

인수

Neuron ... 단어의 갯수 (NeuronM,K,D,E 의 총합)
NeuronM ... 명사의 갯수
NeuronK ... 형용사의 갯수
NeuronD ... 동사의 갯수
NeuronE ... 그 외의 단어의 갯수
Synapses ... 단어 체인(문장)의 갯수

반응

리퀘스트가 데이터를 요구하는 것이었던 경우 (곧, GET일 경우), 서버는 스테이터스 코드에 이어 필요한 헤더를 돌려 보낸다. 돌려주어야 할 헤더는 리퀘스트에 따라서 달라, 그것은 SHIORI/2.1 이후의 사양에서도 각각 정의 된다.

GET Sentence SHIORI/2.0
Sender: materia
Charset: Shift_JIS

----

SHIORI/2.0 200 OK
Sender: First
BalloonOffset: 0,0[1]0,0
Sentence: \0\s0‥‥. \e

BalloonOffset는 생략 가능한 특수한 헤더로, 바이트값 1 과 콤마로 구분되어 왼쪽으로부터 sakura.balloonoffset.x, sakura.balloonoffset.y, kero.balloonoffset.x, kero.balloonoffset.y 를 표현한다. 여기서 설정된 말풍선 오프셋값은 쉘에 설정한 말풍선 오프셋값을 오버라이드(override) 한다. (즉 고스트가 쉘의 영역에까지 진입 하고 있어 매우 특수함).

SHIORI/2.1

SHIORI/2.2 이후의 프로토콜에 흡수, 사용되지 않습니다.

SHIORI/2.2

SHIORI/2.2 는 Shiori 에 범용적인 이벤트를 보내는 리퀘스트이다. 이벤트는 기본적으로 Materia 본체가 동작 상황에 따라 발행하지만, SSTP NOTIFY/1.0 및 SAKURA API/1.3 을 이용해 외부로부터 발생 시키는 것도 할 수 있다. 이러한 리퀘스트는 그 안전성이 SecurityLevel 에 의해 구별된다(후술).

이 문서에서는 Shiori 로서의 이벤트의 해석의 방법(수신)만을 취급한다. 송신에 대해서는 SSTP NOTIFY/1.0 (SpecSstp) 및 SAKURA API/1.3 (SpecSakuraApi) 의 사양서를 참조할 것.

Get Sentence SHIORI/2. 2
Sender: Nobody
Event: OnDisplayChange
Reference0: 32
Reference1: 1280
Reference2: 1024
Charset: Shift_JIS

Event 헤더가 이벤트의 식별자를 표현한다. 이것은 반드시 unique 한 캐릭터 라인이고, 일정하여야 하며, 어떤 하나의 뜻을 가지고 있어야 한다.

Reference 헤더가 이벤트의 부수 정보(인수)를 표현한다. 예를 들면 상기의 예에서는 화면 해상도의 변화 이벤트인 OnDisplayChange 의 인수에 색심도와 해상도가 건네받고 있다. Reference 는 최대로 8개 (Reference0 - Reference7 까지) 정의 된다.

아래에, 본체 통지의 이벤트의 일람을 나타낸다. (곧, Event 헤더의 값이다)

본체 통지 이벤트

타이밍 통지 이벤트

OnFirstBoot

처음 기동했다 (주: 고스트 설치 후 최초 기동시 발생)

인수

OnWindowStateMinimize

최소화되었다

OnWindowStateRestore

최소화 상태로부터 복원되었다

OnBoot

기동했다 (주: 본체가 해당 고스트로 종료 후 다음 번에 본체 실행 시 같은 고스트가 기동하며 발생)

OnClose

종료를 지시받았다 ※지시받는 것에 지나지 않고 종료할지 어떨지는 Shiori 의 판단에 맡기기 때문에 주의 (주: \- 스크립트가 없으면 종료하지 않는다.

OnTeachStart

Teach 대화창이 열렸다

변환 이벤트

OnGhostChanging

자신 이외의 고스트로의 변환을 지시받았다 (주: 고스트 변환시 이전 고스트에게 마지막으로 발생)

인수

OnGhostChanged

인수

OnShellChanging

OnShellChanged

인수

소멸 이벤트

OnVanishSelecting

소멸 통고를 받았다

OnVanishSelected

소멸 확인 다이얼로그에서 YES 가 선택되었다

OnVanishCancel

소멸 확인 다이얼로그에서 NO 가 선택되었다

OnVanishButtonHold

OnVanished

인수

시간 이벤트

OnSecondChange

인수

OnMinuteChange

인수

시간 이벤트의 인수 (공통)

※0. false = 0, true = 1

양이벤트는 돌려준 스크립트가 표시할 수 없는(이 경우, 해당 스크립트는 무시된다) 상태에서도 발생하지만, 그 때문에 표시할 지 표시하지 않을 지 모르는 스크립트를 고스트가 모르는 동안에 어둠에 매장시켜 버릴 가능성이 있다. 그러한 문제를 막기 위해서 cantalk 플래그가 존재한다. cantalk 플래그는 돌려준 스크립트가 본체에 읽혀지는 것인가 버려지는 것인가를 표현한다. 1 이라면 읽혀지고 0 이라면 읽혀지지 않는다.

표면 이벤트

OnSurfaceChange

표면이 바뀌었다 (예: 1번 표면에서 2번 표면으로)

인수

OnSurfaceRestore

표면을 기본 표면(고스트에 의해 다르다. First Ghost 의 경우, 사쿠라는 0, 우뉴는 10)으로 돌려야 할 타이밍이 왔다

※타이밍을 전하는 것만으로 돌릴지 어떨지는 Shiori 가 판단하므로 주의

인수

마우스/키보드 이벤트

주로 만지작 이벤트, 클릭 이벤트, 메뉴 표시 등에 사용

OnMouseMove

마우스가 이동했다

인수

OnMouseClick

마우스가 왼쪽 클릭되었다

인수

OnMouseDoubleClick

마우스가 더블 클릭 되었다

인수

OnMouseWheel

마우스 휠이 회전했다

인수

마우스 이벤트의 인수 (공통)

판정 위치 식별자는 쉘에 의해 자유롭게 정의 된다. 가장 표준적인 것은 Head, Face, Bust 등.

OnKeyPress

키보드가 눌러졌다

인수

인스톨 이벤트

SpecInstall 참조

OnInstallBegin

인스톨이 개시되었다

OnInstallComplete

인스톨이 정상 종료했다

인수

OnInstallFailure

인스톨이 이상종료(ABEND) 했다

인수

OnInstallRefuse

인수

드롭 이벤트

OnFileDropping

파일이 Drag-and-Drop 되었다(파일에 대한 처리전)

인수

OnFileDropped

파일이 Drag-and-Drop 되었다(파일에 대한 처리 종료)

인수

OnDirectoryDrop

디렉토리가 Drag-and-Drop 되었다

인수

OnWallpaperChange

(그림 파일의 Drag-and-Drop 에 의해) 벽지가 변경되었다

인수

파일드롭 이벤트의 인수 (공통)

OnURLDropping

URL이 드롭 되었다(아직 로컬에 파일은 없다)

인수

OnURLDropped

URL이 드롭 되었다(다운로드는 종료해 이미 로컬에 파일이 있다)

인수

BIFF 이벤트 (메일 관련)

OnBIFFBegin

메일 체크가 개시되었다

인수

OnBIFFComplete

메일 체크가 성공했다

인수

OnBIFF2Complete

메일 spool수가 증가했다

인수

reference4 - 아[1]이[1]우[1]에[1][2]카[1]키‥‥
reference5 - 0 1024[1]1 1024[1]‥‥
reference6 - 0 uidl0[1]1 uidl1[1]‥‥

OnBIFFFailure

인수

갱신 이벤트

SpecNetworkUpdate 참조

OnUpdateBegin

네트워크 갱신이 개시되었다

OnUpdateReady

인수

OnUpdateBegin 는 갱신 지시 직후 바로 발생한다. materia 는 그 후 갱신해야할 파일이 있는지 여부를 조사해, 있으면 OnUpdateReady 를 발생시켜 실제의 갱신 작업에 들어간다. 없었던 경우는 OnUpdateComplete 로 그대로 종료한다.

OnUpdateComplete

네트워크 갱신이 성공했다

인수

OnUpdateFailure

네트워크 갱신이 실패했다

인수

OnUpdate.OnDownloadBegin

파일의 다운로드가 개시되었다

인수

OnUpdate.OnMD5CompareBegin

MD5 (에러 체킹 코드)의 비교가 개시되었다

OnUpdate.OnMD5CompareComplete

MD5 가 일치했다

OnUpdate.OnMD5CompareFailure

MD5 가 일치하지 않았다

인수

SNTP 이벤트 (시각 맞춤 관련)

OnSNTPBegin

OnSNTPCompare

OnSNTPCorrect

OnSNTPFailure

인수

헤드라인 센스 이벤트

OnHeadlinesenseBegin

헤드라인 센스가 개시되었다

인수

OnHeadlinesense.OnFind

헤드라인 센스의 결과를 읽어들이라고 지시받았다

인수

Reference2 이후는 OnFind시만 건네받는다. OnFind 지시자는 First, First and Last, Last, Next 의 4개로, 각각 첫 페이지, 첫 페이지이지만 뒷장이 없다 (곧, 한 장 뿐이다), 마지막 페이지, 그리고 중간 페이지를 표현한다.

OnFind 이벤트에서 식별자가 없는 선택을 하면, 그것이 페이지 넘김의 기능을 한다.

{{{ * 반응시 SakuraScript 예제 ...(헤드라인 데이터)...\n\n\q0[][다음의 페이지로] }}}

OnHeadlinesenseComplete

헤드라인 센스가 정상 종료했다

헤드라인 센스의 성공은 헤드라인을 읽을 수 있는가의 여부를 의미하므로, Complete 는 취득에 성공했지만 갱신이 없었던 경우만 통지된다.

인수

OnHeadlinesenseFailure

헤드라인 센스가 실패했다

인수

노래 이벤트

OnMusicPlay

곡의 재생이 시작되었다

인수

(주: OnMusicPlay는 단지 곡의 재생이 되었다는 표시이지 곡에 가사가 첨부되어 있는지의 여부는 아니라는 것에 주의. 보통 OnMusicPlay에서는 "(곡명)이라는 것을 듣고 있는데 뭔지 잘 모르겠어" 등의 대화를 무조건 시도하고 만약 가사가 있어서 가사가 SSTP로 보내진다면 해당 대화가 자동으로 사라지는 (SSTP는 일반 대화를 무시하고 출력된다) 효과를 사용해 마치 고스트가 해당 노래에 대해 알고 있다는 착각을 하도록 처리한다)

선택지 이벤트

OnChoiceSelect

선택지가 선택되었다

인수

OnChoiceTimeout

타임 아웃 (유저가 일정 시간 동안 선택하지 않음) 했다

인수

예외(에러) 이벤트

OnSSTPBreak

SSTP가 브레이크 되었다

인수

마스터 이벤트

SpecNetworkUpdate, SpecInstall 참조

OnUpdatedataCreating

OnUpdatedataCreated

OnNarCreating

OnNarCreated

인수

분류 불가

OnNetworkHeavy

상대 서버가 시간내에 응답하지 않았다

OnDisplayChange

인수

OnSSTPBlacklisting

최종 클라이언트의 블랙 리스트행이 지시받았다

인수

OnRecommendsiteChoice

「추천」메뉴로부터 사이트가 선택되었다

인수

외부 어플리케이션 범용 이벤트

http://clearbrain.khsoft.gr.jp/image/banner.png

http://clearbrain.khsoft.gr.jp/any/comevent.htm

ClearBrain System참조

버섯(키노코) 이벤트

http://clearbrain.khsoft.gr.jp/image/banner.png

http://clearbrain.khsoft.gr.jp/kinoko/shiori.htm

ClearBrain Systems 키노코 페이지

ClearBrain System참조

고양이(네코도리후)이벤트

http://members.jcom.home.ne.jp/umeici/image/nd_b.png

http://members.jcom.home.ne.jp/umeici/nekodorif/toshiori.html

et cetra참조

Reference 의 수에 대하여

Reference 엔트리의 최대수는 SHIORI/2.2 에서는 8입니다(Reference7까지).

OnClose 등 매우 기초적인 것을 제외하고, 대부분의 이벤트는 기본적으로 무시할 수가 있습니다(무반응, 말하지 않는다). 무시하는 경우는 리퀘스트에 대해 204 No Content 스테이터스를 돌려주세요.

SHIORI/2.3b

SHIORI/2. 3 은 Shiori(고스트) 끼리의 대화를 실현하기 위한 방법입니다.

NOTIFY OwnerGhostName

Shiori 클라이언트는 SHOIRI 서버에 대해 부정기적으로 NOTIFY 리퀘스트를 합니다.

NOTIFY OwnerGhostName SHIORI/2.3
Sender: materia
Ghost: 사쿠라
Charset: Shift_JIS

NOTIFY OwnerGhostName은 현재 접속중인 Shiori 클라이언트로 동작하고 있는 고스트명 (Shiori를 사용하고 있는 고스트명)에 대한 통지입니다. 이 정보는 기동시나 고스트 변환시에 통지됩니다.

NOTIFY OtherGhostName

NOTIFY OtherGhostName SHIORI/2.3
Sender: materia
GhostEx: 나루[1]0[1]1
GhostEx: 마유라[1]0[1]1
....
..
Charset: Shift_JIS

※[1] 은 바이트값 1 ※식별자가 GhostEx 인 것은 과거 호환성 때문

NOTIFY OtherGhostName은 현재 통신 가능한 상태로 기동하고 있는 자신 이외의 고스트의 이름에 대한 통지입니다. 존재하는 수만 GhostEx 헤더가 쌓입니다. 자신 이외에 고스트가 없는 경우 GhostEx 헤더는 하나도 부가되지 않습니다.

GhostEx 헤더에는 3개의 정보가 포함되어 왼쪽으로부터 고스트명, 그 고스트의 사쿠라측의 현재의 surface ID, 케로측의 surface ID 를 나타내고 있습니다.

Shiori는 이 정보를 이용해 앞으로 누구에게 이야기할까를 결정 할 수 있습니다.

반응시의 To/Age/Reference 헤더

To 헤더로 상대 고스트명을 지정하는 것으로써, 그 상대(가 가지는 Shiori)에게 이야기할 수가 있습니다.

SHIORI/2.3 200 OK
Sender: 사쿠라
To: 나루
Age: 0
Sentence: \0\s0안녕. \e
Reference0: N/A
Charset: Shift_JIS

ToAge 헤더가 올바르게 지정될 경우, 클라이언트는 통상의 대사 발언에 더하여 Sentence 부를 Direct SSTP (COMMUNICATE/1. 2)를 이용해 To 가 식별하는 다른 Shiori 클라이언트에 송신합니다. (SpecSstp, SpecDirectSstp 참조)

또, 이것 외에, Refernce 헤더를 이용해 상대 클라이언트에 임의의 추가 정보를 줄 수가 있습니다.

사용 할 수 있는 Reference 헤더는 최대 8(Reference7 까지)입니다. 내용에 대해서 규약은 없습니다. 추가 정보가 완전히 필요없는 경우 이 헤더는 생략 할 수 있습니다.

GET Sentence

Direct SSTP 를 수신한 클라이언트는 ShioriGET Sentence 리퀘스트를 합니다.

GET Sentence SHIORI/2.3
Sender: 사쿠라
Sentence: \0\s0안녕. \e
Age: 0
Surface: 0,10
Reference0: N/A
Charset: Shift_JIS

----

SHIORI/2.3 200 OK
Sender: 나루
To: 사쿠라
Age: 1
Sentence: \0\s0아-. \w8\w8안녕. \e
Surface: 0,10
Reference0: N/A
Charset: Shift_JIS

통상의 GET Sentence 리퀘스트와 다른 곳은, Age 헤더가 있는 것으로, 이야기해 온 상대가 다른 Shiori(고스트)이고, SenderNobody 는 아니고 고스트명이라는 두 가지 입니다.

이 리퀘스트에 대해서 대답을 하는 경우는, Sender 로 건네받은 이름(여기에서는 「사쿠라」)을 To 로 지정해 반응을 돌려줍니다. 대답은 위와 같은 루트를 통해 다시 상대의 Shiori 에 통지됩니다.

반응은 하지만 대답은 하지 않는 경우는 To를 생략 합니다.

대답을 하는 경우, Shiori 는 반드시 Age 를 1 증가(increment) 시켜 주세요. 이 값은 주로 언제 회화를 중지할까를 결정하기 위해서 이용됩니다.

SHIORI/2.4

SHIORI/2.4 는 Shiori(고스트)에 대화식으로 정보를 학습 시키기 위한 리퀘스트입니다.

TEACH

{{{ * 1회째의 TEACH TEACH SHIORI/2.4 Word: 갓츠 이시마츠 }}}

우선 클라이언트가 TEACH 리퀘스트를 보냅니다.

311 Not Enough

{{{ * 1회째의 TEACH에 대한 반응 SHIORI/2.4 311 Not Enough Sentence: \h\s0갓츠 이시마츠는 무엇입니까? \e }}}

대부분, 단어의 이름 만으로 학습하기에는 너무 정보가 부족하므로, 311 Not Enough 를 돌려주어 추가 정보의 입력을 요구합니다.

클라이언트는 추가 정보를 Reference 헤더에 세트 해, 재차 TEACH 리퀘스트를 합니다.

{{{ * 2회째의 TEACH 및 반응 TEACH SHIORI/2.4 Word: 갓츠 이시마츠 Reference0: 인명


SHIORI/2.4 311 Not Enough Sentence: \h\s0관계 있는 말이라든가 뭐 있습니까? \e }}}

{{{ * 3회째의 TEACH 및 반응 TEACH SHIORI/2.4 Word: 갓츠 이시마츠 Reference0: 인명 Reference1: 위험


SHIORI/2.4 311 Not Enough Sentence: \h\s0다른 것은? \e }}}

이후, 필요한 정보가 갖추어질 때까지 이 주고받음을 반복합니다. 서버는 Sentence 로 안내하면서 필요한 정보가 갖추어질 때까지 311 을 돌려주어, 학습에 성공한 시점으로 200 을 돌려주세요.

Reference 헤더의 서수는 311 이 돌아갈 때마다 1 증가(increment) 됩니다. 상한은 없습니다.

200 OK

{{{ * 학습 완료. 더 이상 TEACH 발생하지 않음 SHIORI/2.4 200 OK Sentence: \h\s0학습했습니다. \e }}}

312 Advice

312 는 주로 해석할 수 없는 정보등이 입력되었을 때, 현재의 상태를 유지한 채로 안내만 할 때에 사용됩니다.

{{{ * 1회째의 TEACH에 대한 반응 SHIORI/2.4 311 Not Enough Sentence: \h\s0갓츠 이시마츠는 무엇입니까? \e }}}

여기서 클라이언트가 해석할 수 없는 문자를 돌려주었다고 합시다.

{{{ * 2회째의 TEACH 및 반응. 312 Advice 반응으로 3회째에 Reference0에 다시 내용이 넣어진다. TEACH SHIORI/2.4 Word: 갓츠 이시마츠 Reference0: 위험한 것


SHIORI/2.4 312 Advice Sentence: \h\s0‥‥\w8\w8‥‥? \e }}}}

이러한 대답을 하는 것으로 현재의 Reference0은 스택으로부터 제외해져 다음에 입력되는 데이터도 Reference0 으로 보내집니다.

312 로 무효화되는 것은 가장 새로운 Reference 헤더만입니다. 무효인 Reference1 에 대해서 312를 돌려줄 경우, 무효화되는 것은 Reference1 뿐으로, 이미 확정한 Reference0은 전번과 같은 것이 보내십니다.

이상과 같은 동작에 의해 Shiori 는 해석 불능인 데이터를 거부할 수가 있습니다.

SHIORI/2.5

SHIORI/2.5 는 단순한 캐릭터 라인 자원을 취득하기 위한 리퀘스트이다.

GET String

GET String SHIORI/2.5
ID: homeurl
Chrset: Shift_JIS

----

SHIORI/2. 5 200 OK
String: http://sakura.mikage.to/

Shiori는 ID 헤더로 지정된 식별자에 대응한 적절한 캐릭터 라인 혹은 캐릭터 라인의 형태를 취한 int/bool 값을 돌려준다.

정의가 끝난 ID 헤더는 다음과 같다. 특히 생략 가능이라고 표시되지 않는 한 모든 대답은 필수.

ID 헤더

homeurl

네트워크 갱신시에 기준 위치가 되는 URL. 예를 들면 http://sakura.mikage.to/updates2.dau 를 사용해 갱신을 하는 경우, homeurl 이 돌려주는 캐릭터 라인은

http://sakura.mikage.to/

sakura.recommendsites

본체 (사쿠라)측의 추천 사이트의 리스트. 리스트는 컬럼이 바이트값 1, 테이블이 바이트값 2로 구분된다. 컬럼은 왼쪽으로부터, 사이트명, URL, 배너 URL. 바이트값을 [1] [2] 와 표기할 경우, 일반적인 반환값은 이하와 같은 형태가 된다. 생략 가능.

(예)

사쿠라미카게

http://sakura.mikage.to/

http://sakura.mikage.to/banner.png

2행째

http://sakura.mikage.to/

http://sakura.mikage.to/banner.png

사쿠라미카게[1]http://sakura.mikage.to/[1]http://sakura.mikage.to/banner.png[2]2행째[1]

http://sakura.mikage.to/[1]http://sakura.mikage.to/banner.png

kero.recommendsites

케로 (상담역)측의 추천 사이트의 리스트. 서식은 본체측의 것과 같다. 생략 가능.

sakura.portalsites

본체측의 포털 사이트의 리스트. 서식은 추천 사이트와 같다. 생략 가능.

buttoncaption 계열

pop-up menu에 있어서의 각각의 버튼의 캡션 캐릭터 라인. 생략 가능.

vanishbuttonvisible

「소멸 통고」버튼의 화면표시 상태를 표현하는 bool 캐릭터 라인. 0 이 false, 그 외는 모두 true. 생략 가능.

username

유저의 이름. 혹은 통칭.

defaultleft 계열

각각의 쉘의 「디폴트 위치」의 x 좌표. 화면 좌표계.

보안

SHIORI/2.2 는 SSTP 에 의해 작동 될 가능성이 있기 때문에, 보내져 온 이벤트를 신용 할 수 있을지 그렇지 않을지 판단할 필요가 생긴다. 이 판단에는 SecurityLevel 헤더를 이용한다.

SecurityLevel 헤더는 모든 리퀘스트에 반드시 부여된다.

GET Sentence SHIORI/2.2
Sender: materia
SecurityLevel: external
Charset: Shift_JIS

현재 정의 되어 있는 식별자는 다음과 같다.

이 레벨 통지에 Shiori 가 어떻게 반응하는지는 자유롭다. 즉, 레벨 통지가 있다고 해도 모든 Shiori 하부조직이 Secure 하다고 하는 보증은 완전히 없다.

스테이터스 코드

서버가 돌려주어야 할 현상 코드는 다음과 같습니다.

{{{ 2xx - 처리 완료

200 OK

204 No Content

}}}

{{{ 3xx - 처리 완료, 추가 액션 요구

310 Communicate

311 Not Enough

312 Advice

}}}

{{{ 4xx - 리퀘스트 에러

400 Bad Request

}}}

{{{ 5xx - 서버 에러

500 Internal Server Error

}}}

앨리어스(alias)

home
 +-ghost
    +-naru
       +-ghost
          +-master
             +-alias.txt

앨리어스(alias)를 설정하는 것으로, DLL 파일명에 원하는 이름을 사용할 수 있습니다.

alias.txt 의 포맷은 다음과 같습니다.

shiori, sakura.dll

예를 들면 위와 같이 기술하는 것으로, materia 는 shiori.dll 대신에 sakura.dll 을 읽습니다.

엔트리는 생략 가능합니다. 생략 할 경우는 디폴트값(shiori.dll)이 사용됩니다.


2004/04/19 현재 제가 잊어버린 것 포함 불확실한 것이 좀 있습니다. 언젠가는 고칠 예정 (퍽) -- whoami


CategorySpec


Nanika: SpecShiori2 (2008-08-10 19:56:16에 localhost가(이) 마지막으로 수정)