public CavetubeClient()
        {
            this.Connector = new SocketIO();

            this.Connector.OnOpen += e =>
            {
                this.RaiseOnOpen(new CavetubeClientOnOpenEventArgs());
            };

            this.Connector.OnClose += e =>
            {
                this.RaiseOnClose(new CavetubeClientOnCloseEventArgs());
            };

            this.Connector.OnError += e =>
            {
                this.RaiseOnError(new CavetubeClientOnErrorEventArgs(e.Error));
            };

            //別スレッドからだとRaisePropertyChangedが動かない。
            //WPF4で改善予定
            /*this.Connector.OnMessage += e =>*/
            Observable.FromEvent<SocketIOOnMessageCallback, SocketIOOnMessageEventArgs>(a => this.Connector.OnMessage += a, a => this.Connector.OnMessage -= a)
                .ObserveOnDispatcher()
                .Subscribe(e =>
            {
                dynamic json = DynamicJson.Parse(e.ReceivedMessage);

                if (json.mode == "post")
                {
                    var comment = new CavetubeComment()
                    {
                        Number = (int)json.comment_num,
                        Text = json.message
                    };

                    var time = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
                        .AddMilliseconds(json.time)
                        .AddTicks(TimeZoneInfo.Local.BaseUtcOffset.Ticks);

                    comment.PostDate = time;

                    if (json.auth)
                    {
                        comment.Name = json.name;
                    }
                    this.RaiseOnMessage(new CavetubeClientOnMessageEventArgs(comment));
                }
            });
        }
 public CavetubeClientOnMessageEventArgs(CavetubeComment newerComment)
     : base()
 {
     this.NewerComment = newerComment;
 }