2015/03/03

Streaming APIに対応したTypetalkKit 0.2.6をリリースしました

まだStreaming APIはベータ版みたいなので仕様が変更される可能性もありますが、 現時点でのだいたいのメッセージに対応できたのでCocoaPodsで公開します。

(タイトル画像に特に意味はありません)

Streaming API

TypetalkKitのClientクラスで、Streaming向けに追加されたメソッドはstreamingだけです。これは引数として、イベントハンドリングするクロージャを与えます。

例えば、メッセージがポストされたときにはStreamingEvent.PostMessageが送信されるので、これに対応するようにします。

Client.sharedClient.streaming { event in
    switch event {
    case .Connect               : println("connected")
    case .Disconnect(let err)   : println("disconnected: \(err)")
    case .PostMessage(let res)  : self.appendNewPost(res.post!)
    default: ()
    }
}

イベントは28個に対応しています (WebSocketの接続・切断イベントConnectedDisconnectedや未定義メッセージUnknownを除く)。

public enum StreamingEvent {
    case Connected
    case Disconnected(NSError?)

    case AcceptTeamInvite(AcceptTeamInviteEvent)
    case AcceptTopicInvite(AcceptTopicInviteEvent)
    case AddTalkPost(AddTalkPostEvent)
               :
    case UpdateTopic(UpdateTopicEvent)

    case Unknown(String, [String:AnyObject])
    }

Typetalkのドキュメントにはメッセージについての詳しい情報がさっぱりないので自力で取得できたもののみに対応しています。

だいたいのメッセージは適切なイベントに変換されます。 JSのソースコードを見たかぎりでは、対応できていないメッセージはresetMention、broadcastMessage、updatedApplicationだけだと思います (この3つは出しかたがわからなかった)。

なお、未対応のメッセージ (上記3つを含む) が来た場合にはStreamingEvent.UnknownEventになります。

具体的にどういうJSONが来るのかはテストデータのフォルダにあるstreaming-*.jsonを参照してください。

実装について

内部的にはWebsocketsのSwift実装であるStarscreamを利用しています。

なので、最新版のTypetalkKitでは計3つのライブラリに依存しています。

送信されるメッセージや実装などは、Client+Streaming.swiftを見てください。

Starscreamのおかげで、JSONの処理くらいしかやっていません。あと、StreamingEventあたりのDRYじゃない感じをなんとかしたい…。

それ以外の修正

OAuth2のトークンの更新がうまく行われていなかったのを修正したりしています。

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。