Example #1
0
        /// <summary>
        /// Parses a PubSub message from json
        /// </summary>
        /// <param name="json">the received unaltered json text</param>
        /// <param name="message">the resulting argument instance</param>
        /// <returns>the type of the returned argument instance</returns>
        public PubSubMessageType Parse(string json, out PubSubMessageEventArgs message)
        {
            var type = JObject.Parse(json).SelectToken("type")?.ToString();

            switch (type?.ToLowerInvariant())
            {
            case "response":
                return(ParseResponseType(json, out message));

            case "message":
                return(ParseMessageType(json, out message));

            case "pong":
                message = null;
                return(PubSubMessageType.Pong);

            case "reconnect":
                message = null;
                return(PubSubMessageType.Reconnect);

            default:
                message = new UnknownMessageEventArgs(PubSubMessageType.UnknownType, json, string.Empty);
                return(PubSubMessageType.UnknownType);
            }
        }
Example #2
0
        private PubSubMessageType ParseVideoPlayback(string json, string topic, out PubSubMessageEventArgs message)
        {
            var jt = JObject.Parse(json);

            var serverTime = jt.SelectToken("server_time")?.ToString() ?? string.Empty;

            switch (jt.SelectToken("type").ToString())
            {
            case "stream-up":
                var delay = jt.SelectToken("play_delay").ToObject <int>();
                message = new StreamStartMessageEventArgs(delay, serverTime, topic);
                return(PubSubMessageType.StreamStart);

            case "stream-down":
                delay   = jt.SelectToken("play_delay").ToObject <int>();
                message = new StreamStopMessageEventArgs(delay, serverTime, topic);
                return(PubSubMessageType.StreamStop);

            case "viewcount":
                var count = jt.SelectToken("viewers").ToObject <int>();
                message = new ViewerCountMessageEventArgs(count, serverTime, topic);
                return(PubSubMessageType.ViewerCount);

            default:
                message = new UnknownMessageEventArgs(PubSubMessageType.UnknownVideoPlayback, json, topic);
                return(PubSubMessageType.UnknownVideoPlayback);
            }
        }
Example #3
0
        protected virtual void NetClient_HostMessageReceived(object sender, Networking.Common.Peer.MessageReceivedEventArgs e)
        {
            PreDispatchChecks(e.Message);

            if (!Handler.DispatchMessage(e.Message))
            {
                if (ReceivedUnknownMessage != null)
                {
                    UnknownMessageEventArgs args = new UnknownMessageEventArgs();
                    args.CodeAbriv = e.Message.CodeAbreviation;
                    args.CodeID    = e.Message.Code;
                    ReceivedUnknownMessage.Invoke(this, args);
                }
            }

            PostDispatchChecks();
        }
Example #4
0
        private PubSubMessageType ParseModeratorAction(string json, string topic, out PubSubMessageEventArgs message)
        {
            var jt = JObject.Parse(json).SelectToken("data");

            var action = jt.SelectToken("moderation_action")?.ToString() ?? string.Empty;
            var issuer = jt.SelectToken("created_by").ToString();

            var args = jt.SelectToken("args").Select(token => token.ToString()).ToArray();

            switch (action.ToLowerInvariant())
            {
            case "timeout":
                var timeoutReason = args.Length > 2 ? args[2] : string.Empty;
                var duration      = int.Parse(args[1]);
                message = new TimeoutMessageEventArgs(issuer, args[0], duration, timeoutReason, topic);
                return(PubSubMessageType.Timeout);

            case "ban":
                var banReason = args.Length > 1 ? args[1] : string.Empty;
                message = new BanMessageEventArgs(issuer, args[0], banReason, topic);
                return(PubSubMessageType.Ban);

            case "unban":
            case "untimeout":
                message = new UnbanMessageEventArgs(issuer, args[0], topic);
                return(PubSubMessageType.Unban);

            case "host":
                message = new HostMessageEventArgs(args[0], issuer, topic);
                return(PubSubMessageType.Host);

            case "unhost":
                message = new UnhostMessageEventArgs(issuer, topic);
                return(PubSubMessageType.Unhost);

            default:
                message = new UnknownMessageEventArgs(PubSubMessageType.UnknownModeratorAction, json, topic);
                return(PubSubMessageType.UnknownModeratorAction);
            }
        }
Example #5
0
        /// <summary>
        /// Parses pubsub messages of type <code>message</code>
        /// </summary>
        /// <param name="json">the full json</param>
        /// <param name="message">the parsed message</param>
        /// <returns>the message type</returns>
        private PubSubMessageType ParseMessageType(string json, out PubSubMessageEventArgs message)
        {
            var jt = JObject.Parse(json).SelectToken("data");

            var topic = jt.SelectToken("topic")?.ToString() ?? string.Empty;
            var encodedJsonMessage = jt.SelectToken("message").ToString();

            //topic and info are delimited by a .
            var delim = topic.IndexOf(".", StringComparison.Ordinal);

            switch (delim < 0 ? topic : topic.Substring(0, delim))
            {
            case "chat_moderator_actions": return(ParseModeratorAction(encodedJsonMessage, topic, out message));

            case "channel-bitsevents": return(ParseBits(encodedJsonMessage, topic, out message));

            case "video-playback":
                return(ParseVideoPlayback(encodedJsonMessage, topic, out message));

            default:
                message = new UnknownMessageEventArgs(PubSubMessageType.UnknownMessage, json, topic);
                return(PubSubMessageType.UnknownMessage);
            }
        }
Example #6
0
 protected override void OnUnknownMessageNotice(object sender, UnknownMessageEventArgs e)
 {
 }