4noha / idraw

Websocketをつかってみんなで編集、ページ送りできるプレゼンツール
0 stars 0 forks source link

WebSocketで通信する(やや複雑)(一番楽しい) #10

Closed 4noha closed 7 years ago

4noha commented 7 years ago

飛んできた命令を解釈、 返信を全てのクライアントに送信

http://d.hatena.ne.jp/nowokay/20130613 とりあえずの通信はこの例をみてためしてみるといいかもしれません 前の例はTomcat8では削除されているのでJavaEE7のWebsocket機能を使います

命令リスト(こういう感じの文字列がサーバに着ます。クライアントに送ります。) "{ "cmd":"pen", "fx": 10, "fy":20, "tx":30, "ty":40, "color":"white" }" cmdをみてpenコマンドだったらそのままほかのクライアントに送れば大丈夫です jsonを自力で分解するのは大変です。 JacksonというJSONライブラリが速いらしいのでこれを使います http://qiita.com/takehiro224/items/6db2841c0abbf4ffb233

"{ "cmd":"image", "x": 10, "y":20, "image":"dsakfldsklajflkjfgl;dsl;fg=" }" (image命令):(x座標):(y座標):(Base64エンコードされた画像) これもそのまま送るだけ

"{ "cmd":"save", "page":2, "image":"dsakfldsklajflkjfgl;dsl;fg=" }" (save命令):(ページ番号):(Base64エンコードされた画像) これが着たらデータベースにセーブします。

"{ "cmd":"login", "id":"noaki", "new":"true"}" (login命令):(user id):(newフラグ) ログインIDがきたら公開鍵を発行してクライアントに送ってください "{ "cmd":"pubkey", "key":"sdkafjlksdjalfkjsl;dajf" }" ・newフラグがtrue以外なら検索して出てきたidを使う ・newフラグがtrueならuserを追加する エラーが出るときは "{ "cmd":"error", "key":"エラーメッセージ" }" ユーザを検索して無ければエラー送信 "{cmd: "login", error: "ユーザが見つかりません"}"

"{ "cmd":"login", "id":"noaki", "pwd":"aaaa","session_id":"dsafierwjafodsl;afjer;owafjks"}" ユーザにid, pwd, session_idの値が用意できたらそれらを送信するのでログイン処理

"{ "cmd":"session", "id":"sdkafjlksdjalfkjsl;dajf" }" 逆にセッションidが着たらuserがヒットするか調べてヒットしたらページを送ってください "{ "cmd":"page", "num":2, "image":"dsakfldsklajflkjfgl;dsl;fg=" }"

ghost commented 7 years ago

任せてください

4noha commented 7 years ago

https://github.com/nokkii/idraw/pull/13

4noha commented 7 years ago

JacksonでJsonをHashMapに http://stackoverflow.com/questions/443499/convert-json-to-map

4noha commented 7 years ago

public static void main(String[] args) { DbUtil.connect( toMap(m -> { m.put("env", ""); m.put("host", "192.168.1.222:3306"); })); Employee emp = null; emp = Employee.findBy("id_employee", query); DbUtil.close(); }

    }

    // 簡単にMapを作る用メソッド
    public static <K, V> Map<K, V> toMap(Consumer<Map<K, V>> initializer) {
        Map<K, V> map = new LinkedHashMap<>();
        initializer.accept(map);
        return map;
    }
ghost commented 7 years ago

BackgroundImageを保存するJSONコマンドは以下のようにしたいと思います。

"{"cmd":"bgsave","page_num":1,"image":"dsakfldsklajflkjfgl;dsl;fg="}"