Ejemplo n.º 1
0
        /// <summary>
        /// IoTHubによるデバイスツイン更新EventDataを変換する
        /// </summary>
        /// <param name="eventData">EventData</param>
        /// <returns>RmsEvent</returns>
        /// <remarks>
        /// - EventDataがnullの場合はArgumentNullExceptionを投げる
        /// - EventData#Bodyをデシリアライズできない場合ArgumentExceptionを投げる
        /// - EdgeIDをSystemPropertiesから取得できない場合はFormatExceptionを投げる
        /// </remarks>
        private RmsEvent ConvertTwinChanged(EventData eventData)
        {
            // Body以下に必要な情報が格納されている
            string body = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count);

            // Bodyをデシリアライズして必要な情報を抽出
            DeviceTwinEvent deviceTwinEvent = DeviceTwinEvent.DeserializeIfInvalidThrowEx(body);

            return(new RmsEvent()
            {
                //// EdgeIDを取得
                EdgeId = DeviceTwinEvent.GetEdgeId(eventData),
                //// MessageId
                //// MessageDataTime
                /// 他のDispatcherと合わせるため、この時点ではBodyは文字列にしておく。
                MessageBody = JsonConvert.SerializeObject(deviceTwinEvent.Reported)
            });
        }