SignalR.Client._20.Transports.SseEvent.TryParse C# (CSharp) Method

TryParse() public static method

public static TryParse ( string line, SseEvent &sseEvent ) : bool
line string
sseEvent SseEvent
return bool
        public static bool TryParse(string line, out SseEvent sseEvent)
        {
            sseEvent = null;

            if (line.StartsWith("data:", StringComparison.OrdinalIgnoreCase))
            {
                string data = line.Substring("data:".Length).Trim();
                sseEvent = new SseEvent(EventType.Data, data);
                return true;
            }
            else if (line.StartsWith("id:", StringComparison.OrdinalIgnoreCase))
            {
                string data = line.Substring("id:".Length).Trim();
                sseEvent = new SseEvent(EventType.Id, data);
                return true;
            }

            return false;
        }

Usage Example

Example #1
0
        private void ProcessChunks()
        {
            //Debug.WriteLine("AsyncStreamReader: ProcessChunks");
            while (Reading && m_buffer.HasChunks)
            {
                string _line = m_buffer.ReadLine();

                // No new lines in the buffer so stop processing
                if (_line == null)
                {
                    break;
                }

                if (!Reading)
                {
                    return;
                }

                // Try parsing the sseEvent
                SseEvent _sseEvent;
                if (!SseEvent.TryParse(_line, out _sseEvent))
                {
                    continue;
                }

                if (!Reading)
                {
                    return;
                }

                //Debug.WriteLine("AsyncStreamReader: SSE READ [{0}]", _sseEvent.ToString());

                switch (_sseEvent.Type)
                {
                case EventType.Id:
                    m_connection.MessageId = _sseEvent.Data;
                    break;

                case EventType.Data:
                    if (_sseEvent.Data.Equals("initialized", StringComparison.OrdinalIgnoreCase))
                    {
                        if (m_initializeCallback != null)
                        {
                            // Mark the connection as started
                            m_initializeCallback();
                        }
                    }
                    else
                    {
                        if (Reading)
                        {
                            // We don't care about timeout messages here since it will just reconnect
                            // as part of being a long running request
                            bool _timedOutReceived;
                            bool _disconnectReceived;

                            HttpBasedTransport.ProcessResponse(
                                m_connection,
                                _sseEvent.Data,
                                out _timedOutReceived,
                                out _disconnectReceived);

                            if (_disconnectReceived)
                            {
                                m_connection.Stop();
                            }

                            if (_timedOutReceived)
                            {
                                return;
                            }
                        }
                    }
                    break;
                }
            }
        }