Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/narazaka/shiori_proxy-nim

SHIOLINK - SHIORI-BASIC implementation
https://github.com/narazaka/shiori_proxy-nim

shiori ukagaka

Last synced: about 1 month ago
JSON representation

SHIOLINK - SHIORI-BASIC implementation

Awesome Lists containing this project

README

        

# shiori_proxy

SHIORI-Basic の実装です。

## 概要

伺かにおけるSHIORIサブシステムはアンマネージドdllによる実装が仕様となっていますが、
コンソールアプリケーションの方が一般に作成しやすいです。

このshiori_proxy.dllは、コンソールアプリケーションとの標準入出力でSHIORIサブシステムを実現するためのラッパーです。

## ダウンロード・利用

[Releases](https://github.com/Narazaka/shiori_proxy-nim/releases) から最新のdllをダウンロードして下さい。

それを`ghost/master/shiori_proxy.dll`に配置し、`descript.txt`に`shiori,shiori_proxy.dll`と記述して下さい。

また下記で説明している`shiori_proxy.yml`を適切に記述し、SHIORIプロセスプログラムを呼び出すように設定して下さい。

## 設定

`shiori_proxy.yml`で行います

```yaml
command: # 実行コマンド 引数を配列にしたもの
- node.exe
- shiori.js
- ./dict
# timeout: 5 # タイムアウト秒 (未実装)
```

### command 実行コマンド

shiori_proxy.dllは、SHIORI load()時にコマンドを実行してSHIORIプロセスを立ち上げ、SHIORI unload()時にそれを終了します。

load()時に立ち上げるコマンド引数を配列で記述します。

### timeout タイムアウト秒 (未実装)

SHIORIプロセスにリクエストを投げてもこの秒数以内にレスポンスが帰ってこなかった場合、shiori_proxy.dllはSHIORIプロセスがハングしたとみなし、異常終了します。

ベースウェアの実装によってはベースウェアごと落ちますが、そうしない場合ベースウェアごと無限にフリーズして操作不能となる場合が存在する(SSPなど)ので、このような処理をする可能性があります。

## プロトコル

shiori_proxy.dllとSHIORIプロセスの間の通信プロトコルは以下のようなものです。

| 種別 | shiori_proxy.dll | SHIORIプロセス |
|---|---|---|
| (SHIORIプロセス起動) | | |
| load() リクエスト | LOAD SHIORIPROXY/1.0[CRLF]
C:\\SSP\\ghost\\ikaga\\ghost\\master\\[CRLF] | |
| load() レスポンス | | 1[CRLF] |
| request() リクエスト | REQUEST SHIORIPROXY/1.0[CRLF]
GET SHIORI/3.0[CRLF]
Charset: Shift_JIS[CRLF]
Sender: ikagaka[CRLF]
ID: version[CRLF]
[CRLF] | |
| request() レスポンス | | SHIORI/3.0 200 OK[CRLF]
Charset: Shift_JIS[CRLF]
Sender: ikaga[CRLF]
Value: 1.0.0[CRLF]
[CRLF] |
| unload() リクエスト | UNLOAD SHIORIPROXY/1.0[CRLF] | |
| unload() レスポンス | | 1[CRLF] |
| (SHIORIプロセス終了) | | |

## 文字コード

shiori_proxy.dllはSHIORIプロセスに標準入力でSHIORIリクエストなどを受け渡し、標準出力からSHIORIレスポンスなどを受け取ります。

ベースウェアからはShift_JISまたはUTF-8でリクエストが来ることになりますが、実行コマンドでの扱いが簡単になるよう、shiori_proxy.dll内で文字コード変換を行います。

通信時の文字コードは以下のようになります。

- ベースウェアとshiori_proxy.dllの間はSHIORIリクエスト/レスポンスに含まれるCharsetヘッダの文字コード
- shiori_proxy.dllとSHIORIプロセスの間はUTF-8

このときSHIORIリクエストやレスポンスに付加されているCharsetヘッダは書き換えることなく文字コードのみ変換します。

なのでSHIORIプロセスが標準入力から読んだSHIORIリクエストはCharsetヘッダと実際の文字コードが異なる場合が存在します。

またCharsetヘッダと実際の文字コードが異なる状態でSHIORIプロセスから標準出力へSHIORIレスポンスを書き込む事も出来ます。

一覧すると、リクエスト、レスポンスともに以下のような状態になります。

| ベースウェア(SSP等) <-> shiori_proxy.dll | shiori_proxy.dll <-> SHIORIコマンド |
|---|---|
| Charset: Shift_JIS (実際=Shift_JIS) | Charset: Shift_JIS (実際=UTF-8) |
| Charset: UTF-8 (実際=UTF-8) | Charset: UTF-8 (実際=UTF-8) |

## ビルド

### shiori_proxy.dll

```bash
nimble install
nimble dll32
```

### shiori_proxy.exe + myshiori.exe (テスト用)

```bash
nimble install
nimble install shiori
nimble example
```

## License

This is released unser [MIT License](https://narazaka.net/license/MIT?2018)