40
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ElectronでSocket.ioを導入してみる [テスト編]

Last updated at Posted at 2016-03-21

ElectronでSocket.ioを導入するテスト編です。

参考にしたところ

やりたいこと

  • スマホでリモート操作
  • Electronアプリと連動すること

とりあえず、動かしてみる

前提条件:
Node.jsやElectronのあれこれが済んでいること。
まだの場合は、コチラを参照するといいでしょう。

さっそく、Node.jsとSocket.IOによるPCとスマホブラウザのペアリングデモのコードをダウンロードし、適当な箇所に解凍します。
組み込み予定のElectron内に、先ほど解凍したコード全部コピーし、Electronのメインファイルへ「server.js → index.js」へ移植します。

index.js
...
// ここから
// サーバー構築
var http = require("http");
// fsモジュールの読み込み
var fs = require("fs");
// pathモジュールの読み込み
var path = require("path");
// httpサーバーを立てる
var server = http.createServer(requestListener);
// httpサーバーを起動する。
server.listen((process.env.PORT || 5000), function() {
    console.log((process.env.PORT || 5000) + "でサーバーが起動しました");
});
...
    // コントローラーからmouseUpFromControlerというデータを受信
    //(コントローラでマウスアップイベントが発生)
    socket.on("mouseUpFromControler", function(data) {
        socket.to(roomID).broadcast.emit("mouseUpToMain", data);
    });
});
// 接続エラー
io.sockets.on("connect_error", function(socket) {
    console.log("connect_error");
});
// 接続終了
io.sockets.on("disconnect", function(socket) {
    socket.emit("disconnectEvent");
    console.log("disconnecth");
});
// ここまで
// server.js内のスクリプトを移植し、追加します。

また、上記に加えて、ElectronでjQueryを動作させるために、以下を追加する。
なお、よくスマホアプリで使われているような、
Help実装をWebViewで表示したりするタイプなどにも適応が可能。

index.js
...
app.on('ready', function() {
  // Create the browser window.
  mainWindow = new BrowserWindow({width: 950, height: 600, 'node-integration': false});
 // 'node-integration': false これを入れることで、jQueryの読み込みが通常のWebと同様になる。
...

これくらいの手間だけで、webアプリの移植が完了です。

起動時の画面

Socket.IOデモ_Electron_ss_001.png

その他に実装したもの

IPアドレスを表示&取得してみたかったので、下記の内容も実装してみた。

index.js
...
var os = require('os');
var ifaces = os.networkInterfaces();
var ipAddress;

Object.keys(ifaces).forEach(function (ifname) {
  ifaces[ifname].forEach(function (iface) {

    if ('IPv4' !== iface.family || iface.internal !== false) {
      // skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses
      return;
    }

    console.log(ifname, iface.address);
    // en0 192.168.1.NNN
    ipAddress = iface.address;

  });
});
...

 このモジュールとQRコード生成jsを組み合わせ、IPアドレスを取得した後、QRcodeジェネレーターと連携させることで、QRリーダーで読み込めば、入力せずにブラウザ起動が可能。

 これでIPアドレスが自動で変わっても遊べますね。

index.html

    <script>
        // デモ用コード
        $(function() {
            $("#controllerURL").text(location.origin + "/controller.html");
            $('#qrcode').qrcode({width: 90,height: 90, text: location.origin + "/controller.html"});
        });
   </script>

また、進展したら、投稿します。

40
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?