private static List <ActivityLogSerializer.PropertySerializer> SerializeActivitySchema(BinaryWriter writer)
        {
            writer.Write(ActivitySchema.PropertyCollection.Count);
            List <ActivityLogSerializer.PropertySerializer> list = new List <ActivityLogSerializer.PropertySerializer>(ActivitySchema.PropertyCollection.Count);

            foreach (PropertyDefinition propertyDefinition in ActivitySchema.PropertyCollection)
            {
                writer.Write(propertyDefinition.Name);
                if (propertyDefinition.Type == typeof(int))
                {
                    writer.Write(7);
                    list.Add(delegate(BinaryWriter binaryWriter, object propertyValue)
                    {
                        int value = (int)propertyValue;
                        binaryWriter.Write(value);
                    });
                }
                else if (propertyDefinition.Type == typeof(bool))
                {
                    writer.Write(5);
                    list.Add(delegate(BinaryWriter binaryWriter, object propertyValue)
                    {
                        bool value = (bool)propertyValue;
                        binaryWriter.Write(value);
                    });
                }
                else if (propertyDefinition.Type == typeof(string))
                {
                    writer.Write(0);
                    list.Add(delegate(BinaryWriter binaryWriter, object propertyValue)
                    {
                        string value = (string)propertyValue;
                        binaryWriter.Write(value);
                    });
                }
                else if (propertyDefinition.Type == typeof(byte[]))
                {
                    writer.Write(4);
                    list.Add(delegate(BinaryWriter binaryWriter, object propertyValue)
                    {
                        byte[] array = (byte[])propertyValue;
                        binaryWriter.Write(array.Length);
                        binaryWriter.Write(array);
                    });
                }
                else if (propertyDefinition.Type == typeof(Guid))
                {
                    writer.Write(0);
                    list.Add(delegate(BinaryWriter binaryWriter, object propertyValue)
                    {
                        string value = ((Guid)propertyValue).ToString();
                        binaryWriter.Write(value);
                    });
                }
                else if (propertyDefinition.Type == typeof(ExDateTime))
                {
                    writer.Write(8);
                    list.Add(delegate(BinaryWriter binaryWriter, object propertyValue)
                    {
                        long value = ((ExDateTime)propertyValue).ToFileTimeUtc();
                        binaryWriter.Write(value);
                    });
                }
                else
                {
                    if (!(propertyDefinition.Type == typeof(StoreObjectId)))
                    {
                        throw new NotSupportedException(string.Format("Serialization of property {0} of type {1} is not supported", propertyDefinition.Name, propertyDefinition.Type.FullName));
                    }
                    writer.Write(4);
                    list.Add(delegate(BinaryWriter binaryWriter, object propertyValue)
                    {
                        StoreObjectId storeObjectId = (StoreObjectId)propertyValue;
                        byte[] bytes = storeObjectId.GetBytes();
                        binaryWriter.Write(bytes.Length);
                        binaryWriter.Write(bytes);
                    });
                }
            }
            return(list);
        }
Ejemplo n.º 2
0
        private static ReplyTemplate FindByTemplateGuid(MailboxSession session, RuleAction.OOFReply ruleAction)
        {
            MessageItem messageItem = null;

            try
            {
                using (Folder folder = Folder.Bind(session, DefaultFolderType.Inbox))
                {
                    byte[] replyTemplateEntryIdFromTemplateGuid = ReplyTemplate.GetReplyTemplateEntryIdFromTemplateGuid(folder, ruleAction.ReplyTemplateGuid);
                    if (replyTemplateEntryIdFromTemplateGuid != null)
                    {
                        StoreObjectId storeObjectId = StoreObjectId.FromProviderSpecificId(replyTemplateEntryIdFromTemplateGuid);
                        messageItem = MessageItem.Bind(session, storeObjectId, new PropertyDefinition[]
                        {
                            ItemSchema.ReplyTemplateId
                        });
                        messageItem.OpenAsReadWrite();
                        ReplyTemplate.Tracer.TraceDebug <IExchangePrincipal, Guid, byte[]>(0L, "Mailbox:{0}: Found reply template by GUID. GUID={1}, Entry Id={2}", session.MailboxOwner, ruleAction.ReplyTemplateGuid, storeObjectId.GetBytes());
                    }
                    else
                    {
                        ReplyTemplate.Tracer.TraceDebug <IExchangePrincipal, Guid>(0L, "Mailbox:{0}: Found no reply template by GUID. GUID={1}", session.MailboxOwner, ruleAction.ReplyTemplateGuid);
                        messageItem = null;
                    }
                }
            }
            catch (ObjectNotFoundException)
            {
                return(null);
            }
            if (messageItem != null)
            {
                return(new ReplyTemplate(messageItem));
            }
            return(null);
        }