コード例 #1
0
        internal RawServerSentEvent(ServerSentEvent serverSentEvent)
            : this()
        {
            if (!String.IsNullOrWhiteSpace(serverSentEvent.Id))
            {
                Id = Encoding.UTF8.GetBytes(serverSentEvent.Id);
            }

            if (!String.IsNullOrWhiteSpace(serverSentEvent.Type))
            {
                Type = Encoding.UTF8.GetBytes(serverSentEvent.Type);
            }

            if (serverSentEvent.Data != null)
            {
                List <byte[]> data = new List <byte[]>(serverSentEvent.Data.Count);

                foreach (string dataItem in serverSentEvent.Data)
                {
                    if (dataItem != null)
                    {
                        data.Add(Encoding.UTF8.GetBytes(dataItem));
                    }
                }

                Data = data;
            }
        }
コード例 #2
0
        private static int GetEventMaxBytesCount(ServerSentEvent serverSentEvent)
        {
            int bytesCount = CRLF_LENGTH;

            if (!String.IsNullOrWhiteSpace(serverSentEvent.Id))
            {
                bytesCount += GetFieldMaxBytesCount(_sseIdField, serverSentEvent.Id);
            }

            if (!String.IsNullOrWhiteSpace(serverSentEvent.Type))
            {
                bytesCount += GetFieldMaxBytesCount(_sseEventField, serverSentEvent.Type);
            }

            if (serverSentEvent.Data != null)
            {
                for (int dataItemIndex = 0; dataItemIndex < serverSentEvent.Data.Count; dataItemIndex++)
                {
                    if (serverSentEvent.Data[dataItemIndex] != null)
                    {
                        bytesCount += GetFieldMaxBytesCount(_sseDataField, serverSentEvent.Data[dataItemIndex]);
                    }
                }
            }

            return(bytesCount);
        }
コード例 #3
0
        private void HandleSSEMessage(EventSource eventSource, Message m)
        {
            Debug.Log("Received message " + m);
            MessageRepresentation message = JsonUtility.FromJson <MessageRepresentation>(m.Data);

            ServerSentEvent?.Invoke(this, message);
        }
コード例 #4
0
        internal static ServerSentEventBytes GetEventBytes(ServerSentEvent serverSentEvent)
        {
            int bytesCount = 0;

            byte[] bytes = new byte[GetEventMaxBytesCount(serverSentEvent)];

            if (!String.IsNullOrWhiteSpace(serverSentEvent.Id))
            {
                bytesCount = GetFieldBytes(_sseIdField, serverSentEvent.Id, bytes, bytesCount);
            }

            if (!String.IsNullOrWhiteSpace(serverSentEvent.Type))
            {
                bytesCount = GetFieldBytes(_sseEventField, serverSentEvent.Type, bytes, bytesCount);
            }

            if (serverSentEvent.Data != null)
            {
                for (int dataItemIndex = 0; dataItemIndex < serverSentEvent.Data.Count; dataItemIndex++)
                {
                    if (serverSentEvent.Data[dataItemIndex] != null)
                    {
                        bytesCount = GetFieldBytes(_sseDataField, serverSentEvent.Data[dataItemIndex], bytes, bytesCount);
                    }
                }
            }

            bytes[bytesCount++] = CR;
            bytes[bytesCount++] = LF;

            return(new ServerSentEventBytes(bytes, bytesCount));
        }
コード例 #5
0
        protected override void Append(LoggingEvent loggingEvent)
        {
            var message = base.RenderLoggingEvent(loggingEvent);
            var sse     = new ServerSentEvent(loggingEvent.Level.DisplayName, message);

            _channel.Send(sse, new CancellationTokenSource(TimeSpan.FromSeconds(5)).Token);
        }
コード例 #6
0
        public Task SendEventAsync(ServerSentEvent serverSentEvent, string electronId)
        {
            if (_clients.TryGetValue(electronId, out var client))
            {
                return(client.SendEventAsync(serverSentEvent));
            }

            return(Task.FromResult(false));
        }
コード例 #7
0
 protected override void Write(LogEventInfo logEvent)
 {
     if (Active)
     {
         var message = base.Layout.Render(logEvent);
         var sse     = new ServerSentEvent(logEvent.Level.Name.ToUpperInvariant(), message);
         _channel.Send(sse, new CancellationTokenSource(TimeSpan.FromSeconds(5)).Token);
     }
 }
        /// <summary>
        /// Sends event to client.
        /// </summary>
        /// <param name="serverSentEvent">The event.</param>
        /// <param name="cancellationToken">The cancellation token to cancel operation.</param>
        /// <returns>The task object representing the asynchronous operation.</returns>
        public async Task <bool> SendEventAsync(ServerSentEvent serverSentEvent, CancellationToken cancellationToken)
        {
            bool success = await SendAsync(ServerSentEventsHelper.GetEventBytes(serverSentEvent), cancellationToken);

            if (success)
            {
                LastEventId = serverSentEvent.Id;
            }
            return(success);
        }
コード例 #9
0
 public IEnumerator PlayCard(int gameId, int turnCounter, int cardId, int targetPlayer, Action callback, Action errorHandler)
 {
     yield return(MakeRequest(UnityWebRequest.Put(Configuration.API_URL + HttpResources.DELIMITER + HttpResources.GAMES + HttpResources.DELIMITER + gameId + HttpResources.DELIMITER + HttpResources.TURNS + HttpResources.DELIMITER + turnCounter + HttpResources.DELIMITER + HttpResources.CARDS, JsonUtility.ToJson(new CardRequest(cardId, targetPlayer))),
                              "POST",
                              null,
                              callback,
                              response =>
     {
         errorHandler?.Invoke();
         ServerSentEvent?.Invoke(this, new MessageRepresentation(response));
     }));
 }
コード例 #10
0
        // PUT: api/Subscriptions/5
        public void Put(string id)
        {
            ServerSentEvent subscription = null;

            lock (_subscriptions)
            {
                _subscriptions.TryGetValue(id, out subscription);
            }
            if (subscription != null)
            {
                subscription.Send("Event!");
            }
        }
コード例 #11
0
 // GET: api/Subscriptions/5
 public HttpResponseMessage Get(string id)
 {
     lock (_subscriptions)
     {
         ServerSentEvent subscription;
         if (!_subscriptions.TryGetValue(id, out subscription))
         {
             subscription       = new ServerSentEvent(5);
             _subscriptions[id] = subscription;
         }
         try
         {
             return(subscription.AddSubscriber(base.Request));
         }
         catch (Exception ex)
         {
             throw ex;
         }
     }
 }
コード例 #12
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                ServerSentEvent serverSentEvent = new ServerSentEvent()
                {
                    Id   = "xxx",
                    Type = "heartbeat",
                    Data = new List <string>()
                    {
                        String.Format(HEARTBEAT_MESSAGE_FORMAT, DateTime.UtcNow)
                    }
                };
                //await _serverSentEventsService.SendEventAsync(String.Format(HEARTBEAT_MESSAGE_FORMAT, DateTime.UtcNow));
                string toSend = JsonConvert.SerializeObject(serverSentEvent);
                await _serverSentEventsService.SendEventAsync(toSend);

                await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
            }
        }
コード例 #13
0
        /// <summary>
        /// Sends an server sent data event into the stream
        /// </summary>
        /// <param name="serverSentEvent">ServerSentEvent object representing the payload.</param>
        /// <param name="response">HttpRepsonse representing the response stream.</param>
        /// <returns>Task to be used to sync execution flow.</returns>
        internal static async Task WriteSseEventAsync(this HttpResponse response, ServerSentEvent serverSentEvent)
        {
            if (!String.IsNullOrWhiteSpace(serverSentEvent.Id))
            {
                await response.WriteSseEventFieldAsync(Constants.SSE_ID_FIELD, serverSentEvent.Id);
            }
            if (!String.IsNullOrWhiteSpace(serverSentEvent.Type))
            {
                await response.WriteSseEventFieldAsync(Constants.SSE_EVENT_FIELD, serverSentEvent.Type);
            }
            if (serverSentEvent.Data != null)
            {
                foreach (string data in serverSentEvent.Data)
                {
                    await response.WriteSseEventFieldAsync(Constants.SSE_DATA_FIELD, data);
                }
            }
            await response.WriteSseEventBoundaryAsync();

            await response.Body.FlushAsync();
        }
コード例 #14
0
        internal static async Task WriteSseEventAsync(this HttpResponse response, ServerSentEvent serverSentEvent)
        {
            if (!string.IsNullOrWhiteSpace(serverSentEvent.Id))
            {
                await response.WriteSseEventFieldAsync("id", serverSentEvent.Id);
            }

            if (!string.IsNullOrWhiteSpace(serverSentEvent.Type))
            {
                await response.WriteSseEventFieldAsync("event", serverSentEvent.Type);
            }

            if (serverSentEvent.Data != null)
            {
                foreach (string data in serverSentEvent.Data)
                {
                    await response.WriteSseEventFieldAsync("data", data);
                }
            }

            await response.WriteSseEventBoundaryAsync();

            response.Body.Flush();
        }
コード例 #15
0
 /// <summary>
 /// Sends event to client.
 /// </summary>
 /// <param name="serverSentEvent">The event.</param>
 /// <returns>The task object representing the asynchronous operation.</returns>
 public Task SendEventAsync(ServerSentEvent serverSentEvent)
 {
     return(SendEventAsync(new RawServerSentEvent(serverSentEvent)));
 }
コード例 #16
0
 public ServerSentEventReceivedEventArgs(ServerSentEvent message)
 {
     this.Message = message;
 }
コード例 #17
0
 /// <summary>
 /// Sends event to client.
 /// </summary>
 /// <param name="serverSentEvent">The event.</param>
 /// <param name="cancellationToken">The cancellation token to cancel operation.</param>
 /// <returns>The task object representing the asynchronous operation.</returns>
 public Task SendEventAsync(ServerSentEvent serverSentEvent, CancellationToken cancellationToken)
 {
     return(SendAsync(ServerSentEventsHelper.GetEventBytes(serverSentEvent), cancellationToken));
 }
 /// <summary>
 /// Sends event to client.
 /// </summary>
 /// <param name="serverSentEvent">The event.</param>
 /// <returns>The task object representing the asynchronous operation.</returns>
 public Task SendEventAsync(ServerSentEvent serverSentEvent)
 {
     return(SendAsync(ServerSentEventsHelper.GetEventBytes(serverSentEvent)));
 }