예제 #1
0
        public async Task HandleEventAsync(WebhookEventBase ev)
        {
            if (ev == null)
            {
                throw new ArgumentNullException(nameof(ev));
            }

            switch (ev.Type)
            {
            case EventType.Message:
                await HandleMessage((MessageEvent)ev)
                .ConfigureAwait(false);

                return;

            case EventType.Follow:
                await HandleFollow((FollowEvent)ev)
                .ConfigureAwait(false);

                return;

            case EventType.Unfollow:
                await HandleUnfollow((UnfollowEvent)ev)
                .ConfigureAwait(false);

                return;

            case EventType.Join:
                await HandleJoin((JoinEvent)ev)
                .ConfigureAwait(false);

                return;

            case EventType.Leave:
                await HandleLeave((LeaveEvent)ev)
                .ConfigureAwait(false);

                return;

            case EventType.Postback:
                await HandlePostback((PostbackEvent)ev)
                .ConfigureAwait(false);

                return;

            case EventType.Beacon:
                await HandleBeacon((BeaconEvent)ev)
                .ConfigureAwait(false);

                return;

            default:
                throw new LineException($"unknown event type: {ev.Type}");
            }
        }
        private void AddUnmappedPropertiesAsUnique(WebhookEventBase webhookEvent, JObject jObject)
        {
            var dict = jObject.ToObject <Dictionary <string, object> >();

            foreach (var o in dict)
            {
                if (KnownProperties.Contains(o.Key))
                {
                    continue;
                }

                webhookEvent.UniqueParameters.Add(o.Key, o.Value == null ? null : o.Value.ToString());
            }
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var jsonObject = JObject.Load(reader);

            //serialise based on the event type
            JToken eventName = null;

            jsonObject.TryGetValue("event", StringComparison.CurrentCultureIgnoreCase, out eventName);

            if (!TypeMapping.ContainsKey(eventName.ToString()))
            {
                throw new NotImplementedException(string.Format("Event {0} is not implemented yet.", eventName));
            }

            Type             type        = TypeMapping[eventName.ToString()];
            WebhookEventBase webhookItem = (WebhookEventBase)jsonObject.ToObject(type, serializer);

            return(webhookItem);
        }