示例#1
0
        private string GetEncryptedLocalSession(SiteInfo siteInfo, User user, ServerSession session)
        {
            var lsession   = GetLocalSession(siteInfo, user, session);
            var sessionStr = jsonConvert.Serialize(lsession);

            authEncrypt.Key = siteInfo.EncryptKey;
            authEncrypt.IV  = siteInfo.EncryptSecret;
            return(authEncrypt.Encrypt(sessionStr));
        }
        public async void OnEvenAdded(object?sender, EventAddedEventArgs args)
        {
            if (!(sender is Thing thing))
            {
                _logger.LogWarning("The sender is not a Thing, not going to notify.");
                return;
            }

            if (thing.ThingContext.EventsSubscribes[args.EventName].IsEmpty)
            {
                _logger.LogTrace("No subscriber for this event.  [Thing: {thingName}][Event: {eventName}]",
                                 thing.Name, args.EventName);
                return;
            }

            var message = _convert.Serialize(new WebSocketResponse("event",
                                                                   new Dictionary <string, object?>
            {
                [_option.PropertyNamingPolicy.ConvertName(args.EventName)] = args.Event
            }));

            _logger.LogInformation("Going to notify event via Web Socket. [Thing: {thingName}][Event: {eventName}]",
                                   thing.Name, args.EventName);

            foreach (var(_, socket) in thing.ThingContext.EventsSubscribes[args.EventName].ToArray())
            {
                if (socket.State != WebSocketState.Open || socket.CloseStatus.HasValue)
                {
                    _logger.LogInformation("The Web Socket is not open or was requested to close. [Thing: {thingName}][Event: {eventName}]",
                                           thing.Name, args.EventName);
                    return;
                }

                await socket.SendAsync(message, WebSocketMessageType.Text, true, CancellationToken.None)
                .ConfigureAwait(false);
            }
        }