コード例 #1
0
            private bool TryParseEvent(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);
            }
コード例 #2
0
        private void OnEventReceived(SseEvent @event)
        {
            switch (@event.@event)
            {
            case "message":
                OnMessageEvent?.Invoke(@event.jsonData);
                break;

            case "subscription":
                OnSubscriptionEvent?.Invoke(@event.jsonData);
                break;

            case "welcome":
                // do nothing
                // (used by the SseSocket to detect
                // connection establishment)
                break;

            case "heartbeat":
                // do nothing
                break;

            case "end-connection":
                // do nothing
                // (used by the SseSocket to detect
                // server-requested disconnection)
                break;

            default:
                Debug.LogWarning(
                    "[Unisave] Unknown broadcasting event received: " +
                    @event.@event
                    );
                break;
            }
        }
コード例 #3
0
            private bool TryParseEvent(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;
            }
コード例 #4
0
        private void ProcessChunks()
        {
            Debug.WriteLine("ProcessChunks");
            while (Reading && _buffer.HasChunks)
            {
                var line = _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("SSE READ: " + sseEvent);

                switch (sseEvent.Type)
                {
                case EventType.Id:
                    _connection.MessageId = sseEvent.Data;
                    break;

                case EventType.Data:
                    if (!sseEvent.Data.Equals("initialized", StringComparison.OrdinalIgnoreCase))
                    {
                        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(
                                _connection,
                                sseEvent.Data,
                                out timedOutReceived,
                                out disconnectReceived);

                            if (disconnectReceived)
                            {
                                _connection.Stop();
                            }

                            if (timedOutReceived)
                            {
                                return;
                            }
                        }
                    }
                    break;
                }
            }
        }
コード例 #5
0
ファイル: SseClient.cs プロジェクト: vlingo-net/xoom-net-http
 public void Send(SseEvent @event) => Send(@event.Sendable());