まだ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の接続・切断イベントConnected
とDisconnected
や未定義メッセージ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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。