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); }
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; } }
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; }
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; } } }
public void Send(SseEvent @event) => Send(@event.Sendable());