http://muzigram.muzigen.net/2013/03/gaegochannelapi-golang.html
の続き
あったのでやってみた。つか用意されてるのかよ。
scope外でやると
Exception: Cannot get JavaScript context out of scope.
と怒られます。
channel-dart.jsを読み込んでおきましょう。
■ 今回のプロジェクト
https://github.com/mogeta/golang_channelAPI_example_dart■ GAEのchannelAPIをdartで動かしてみよう。
面白そうだから
see also
- http://pub.dartlang.org/
- http://pub.dartlang.org/packages/appengine_channel
- https://code.google.com/p/gae-channel-api-dart/
あったのでやってみた。つか用意されてるのかよ。
■ pub install
pubspec.yamlname: channelDart dependencies: appengine_channel: any js: any
依存関係のあるライブラリを
pub install
と叩くだけで取ってきてくれる。
■ js.scoped
dartはjs libraryを使って
javascriptと連携を取ることができる。
js libraryはproxyと呼ばれるオブジェクト経由でdartとやり取りするんだけど
まぁ、とりあえず動かすところまで行ってしまおう。
js.scoped(() { token = js.context.token; meID = js.context.me; gameID = js.context.game_key; });js.scoped()内で値を取得しましょう。
scope外でやると
Exception: Cannot get JavaScript context out of scope.
と怒られます。
■ HTML
特筆する部分は以下channel-dart.jsを読み込んでおきましょう。
<script> var token = "{{.token}}" var me = "{{.me}}" var game_key = "{{.game_key}}" </script> <script type="text/javascript" src="/_ah/channel/jsapi"></script> <script type="text/javascript" src="/js/channel-dart.js"></script> <script type="application/dart" src="/dart/hello.dart"></script>
■ Screen Shot
出来上がったものがこちら、見た目は変わらんねー。dartiumで見ないと意味ないですよん。■ source code
hello.dartimport 'package:js/js.dart' as js; import 'package:appengine_channel/appengine_channel.dart' as ch; import 'dart:html'; void main() { String token; String meID; String gameID; js.scoped(() { token = js.context.token; meID = js.context.me; gameID = js.context.game_key; }); openChannel(token); setButtonListner(meID,gameID); } void openChannel(String token) { Element element = document.query("#area"); ch.Channel channel = new ch.Channel(token); ch.Socket socket = channel.open() ..onOpen = (() => print("open")) ..onClose = (() => print("close")) ..onMessage = ((m){ element.innerHtml = "${element.innerHtml}${m}
"; print("${m}"); }) ..onError = ((code, desc) => print("error: $code $desc")); } void setButtonListner(String meID,String gameID){ var btn; btn = document.query("#button_id"); btn.onClick.listen((e){ var httpRequest; httpRequest = new HttpRequest(); httpRequest.open('POST', '/receive?g=${meID}${gameID}', true); httpRequest.send(); }); }
0 件のコメント :
コメントを投稿