読者です 読者をやめる 読者になる 読者になる

socket.ioでスマホブラウザ→heroku(node.js)→スマホ→Unity(mac)

前回のWebSocketでスマホブラウザ→heroku(node.js)→Unity(mac)ではWebSocketでやりましたがWebSocketだとAndroid4.4以外のブラウザはダメです。

socket.ioをいろいろ試したけどMac上のUnityでは全然つながらず。。
試しにAndroidアプリ(java)でsocket.ioを試すと接続できました。

というわけで下記の仕組みならいけそうだなと。

f:id:primevision:20140401161934j:plain



Androidテザリング
Macテザリングwifiにつなぐ
・サーバのnode.jsに送られたデータはAndroidに届く
・そのデータをAndroidアプリからOSCで制御用PCに送信

Android2.3のGalaxySでもsocketでUnityまで送信できました。
前回のFlashCCで書き出したcanvasも動いたし。

これでイベントに来たお客さんがスマホブラウザでインスタレーションに参加しやすくなります。
しかもこれならイベント会場にネット環境が無くても、携帯の電波が届けばいけます。
ただsocketを受け取るスマホが安定して動くかどうかが心配。どの程度の数まで捌けるかとか。


サーバーサイド(heroku:node.js)

var express = require('express')
  , http = require('http')
  , path = require('path')
  , socketio = require('socket.io')
  , port = process.env.PORT || 5000;
 
var app = express()
  , server = require('http').createServer(app)
  , io = socketio.listen(server);

//よくわかって無いけどこれ書いとくと表示するhtmlで外部jsを読み込める
app.use(express.static(__dirname + '/'));

server.listen(port);

io.set('transports', [
    'websocket'
  , 'xhr-polling'
  ]);

server.listen(app.get('port'))

var hostpc;
 
io.sockets.on('connection', function(socket) {
  socket.on('sethost', function (data) {
    //socketを受け取るAndroid端末を設定
    hostpc = socket;
  });
  socket.on('fromclient', function (data) {
        //お客さんのスマホからのデータをAndroid端末へ
  	if (hostpc != null) {
  		hostpc.emit('fromclient', data);
  	}
  });
});