2013年7月20日土曜日

cocos2dx JavaScript Bindings の websocket

cocos2dx に xhr と websocketが実装されました。
cocos2d-x ver 2.1.4 が神アップデートすぎる件について

javascriptでopenglのパフォーマンスが得られるのは素敵なのに
通信ができないんじゃ使えないじゃん。
って思ってましたが、実装されちゃったので早速使ってみます。

twitterのstreaming api を流してみます。
こんな感じ↓

streamingapiに繋ぐ

まずは node と twitterを繋ぐ
Node.js で Twitter Streaming API のデータを Treasure Data に流しこむ | Please Sleep
↑こちらからコピペ。
素晴らしい!Please Sleep さんありがとうございます!

var twitter = require('ntwitter');
var twitter = new twitter({
    consumer_key: '-----',
    consumer_secret: '-----',
    access_token_key: '-----',
    access_token_secret: '----',
});
var trackList = [
 '#ニュース'
 , '#まとめ'
 , '#nhk'
];
twitter.stream('statuses/filter', {'track': trackList.join(',')}, function (stream) {
    stream.on("data", function(data){
        console.log(data.text);
        broadcast(JSON.stringify(data)); // ← broadcastは次で
    });
});

websocketサーバーを作る

次にwebsocketサーバーを作ります。
node.jsのいろいろなモジュール23 – wsでWebSocket接続 | Developers.IO
↑こちらからコピペ。
Developers.IOさんありがとう!

'use strict';

//app.js
var WebSocketServer = require('ws').Server
    , http = require('http')
    , express = require('express')
    , app = express();
 
app.use(express.static(__dirname + '/'));
var server = http.createServer(app);
var wss = new WebSocketServer({server:server});
 
//Websocket接続を保存しておく
var connections = [];
 
//接続時
wss.on('connection', function (ws) {
    console.log("connection");
    //配列にWebSocket接続を保存
    connections.push(ws);
    //切断時
    ws.on('close', function () {
        connections = connections.filter(function (conn, i) {
            return (conn === ws) ? false : true;
        });
    });
});
 
 // console.log(wss);
//ブロードキャストを行う
function broadcast(message) {
    connections.forEach(function (con, i) {
        con.send(message);
    });
};
もうGoogle検索とコピー&ペースとで何でも作れますね。
先人の知恵に感謝

cocos2dx javascriptから繋ぐ

cocos2dxのサンプルの中にwebsocketの使用例が入ってるのでそれを見ながら書いてみます

cocos2dx_jsのプロジェクトを新規に作って
AppDelegate.cppに

#include "jsb_websocket.h"
// 中略 
sc->addRegisterCallback(register_jsb_websocket);

を追加して

hello.jsのどっかに以下


// websocketのurl
var url = "ws://sockettest2.marimo.c9.io";
var socket = new WebSocket(url);
socket.onopen = function(evt) {
    cc.log("onopen");
};
socket.onmessage = function(evt) {
    var jsonData = JSON.parse(evt.data);
    cc.log(jsonData.text);
};
socket.onerror = function(evt) {
    cc.log("sendText Error was fired");
};
socket.onclose = function(evt) {
    cc.log("_wsiSendText websocket instance closed.");
};

流れた!

あとはこれを使って何か描画してみよう
JSON.parseがちょこちょここけるのはなぜだろう。

そんなcocos2dx, websocket に興味のある(なくてもOK)デザイナー募集中!

現在スバコラボではデザイナーを【爆裂】で【激求】しています。
お気軽にご応募ください
ご応募はこちらから

0 件のコメント:

コメントを投稿