Exemple #1
0
        private async Task <ZimbraMessage> ProcessAdministrationMessage(ZimbraMessage zimbraMessage)
        {
            if (administration == null)
            {
                administration = new ZimbraAdminSoapClient(binding, remoteAddressAdmin);
            }
            object message = await ProcessMessage(administration, zimbraMessage);

            return(message as ZimbraMessage);
        }
Exemple #2
0
        private async Task <ZimbraMessage> ProcessAccountMessage(ZimbraMessage zimbraMessage)
        {
            if (account == null)
            {
                account = new ZimbraAccountSoapClient(binding, remoteAddress);
            }
            object message = await ProcessMessage(account, zimbraMessage);

            return(message as ZimbraMessage);
        }
Exemple #3
0
        //private static ZimbraAdminExtSoapClient administrationExtended = null;

        private async Task <ZimbraMessage> ProcessAdministrationExtendedMessage(ZimbraMessage zimbraMessage)
        {
            /*
             * if (administrationExtended == null)
             * {
             *  administrationExtended = new ZimbraAdminExtSoapClient(binding, remoteAddressAdmin);
             * }
             *
             * object message = await ProcessMessage(administration, zimbraMessage);
             * return message as ZimbraMessage;
             */
            throw new NotImplementedException();
        }
Exemple #4
0
        //private static ZimbraMailSoapClient mail = null;

        private async Task <ZimbraMessage> ProcessMailMessage(ZimbraMessage zimbraMessage)
        {
            /*
             * if (mail == null)
             * {
             *  mail = new ZimbraMailSoapClient(binding, remoteAddress);
             * }
             *
             * return ProcessMessage(mail, zimbraMessage);
             */

            throw new NotImplementedException();
        }
Exemple #5
0
        //private static ZimbraReplicationSoapClient replication = null;

        private async Task <ZimbraMessage> ProcessReplicationMessage(ZimbraMessage zimbraMessage)
        {
            /*
             * if (replication == null)
             * {
             *  replication = new ZimbraReplicationSoapClient(binding, remoteAddress);
             * }
             *
             * return ProcessMessage(replication, zimbraMessage);
             */

            throw new NotImplementedException();
        }
Exemple #6
0
        //private static ZimbraVoiceSoapClient voice = null;
        private async Task <ZimbraMessage> ProcessVoiceMessage(ZimbraMessage zimbraMessage)
        {
            /*
             * if (voice == null)
             * {
             *  voice = new ZimbraVoiceSoapClient(binding, remoteAddress);
             * }
             *
             * return ProcessMessage(voice, zimbraMessage);
             */

            throw new NotImplementedException();
        }
Exemple #7
0
        private async Task <object> ProcessMessage(object client, ZimbraMessage zimbraMessage)
        {
            try
            {
                string     name       = zimbraMessage.GetType().Name;
                MethodInfo methodInfo = client.GetType().GetMethod(name);
                object[]   parameters = new object[] { zimbraMessage };
                object     response   = await Task.Run(async() => methodInfo.Invoke(client, parameters));

                //System.Func<object,object[]> delegate = methodInfo.Invoke;
                //delegate.BeginInvoke(client, new object[] { zimbraMessage });
                //Func<ZimbraAdminSoapClient, ZimbraMessage[], ZimbraMessage> messageDelegate = (Func<ZimbraAdminSoapClient, ZimbraMessage[], ZimbraMessage>)Delegate.CreateDelegate(typeof(Func<ZimbraAdminSoapClient, ZimbraMessage[], ZimbraMessage>), methodInfo,);

                //invoke = new InvokeZimbra(client, messages);
                //Delegate zimbraDelegate = InvokeZimbra.CreateDelegate(client.GetType(),methodInfo);
                //Task<object> response = (Task<object>)zimbraDelegate.DynamicInvoke(messages);
                //Task<object> response = (Task<object>)methodInfo.Invoke(client, new object[] { zimbraMessage });
                //object response = methodInfo.Invoke(client, new object[] { zimbraMessage });
                //return (ZimbraMessage)response;

                return(response);
            }
            catch (FaultException fex)
            {
                throw fex;
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null && ex.InnerException.GetType() == typeof(FaultException))
                {
                    throw ex.InnerException;
                }

                throw ex;
            }
        }
Exemple #8
0
        public async Task <ZimbraMessage> Message(ZimbraMessage zimbraMessage)
        {
            ZimbraMessage message        = null;
            bool          reauthenticate = false;

            try
            {
                if (!Authenticated.Value && !AuthenticatedAdmin.Value)
                {
                    Authenticate();
                }

                /*
                 * if (AuthenticationExpired && Authenticated.Value)
                 * {
                 *  Authenticate();
                 * }
                 *
                 * if (AuthenticationAdminExpired && AuthenticatedAdmin.Value)
                 * {
                 *  Authenticate();
                 * }
                 */

                string ns = zimbraMessage.GetType().Namespace;

                switch (ns)
                {
                case "ClubCloud.Zimbra.Account":
                    message = await ProcessAccountMessage(zimbraMessage);

                    break;

                case "ClubCloud.Zimbra.Administration":
                    message = await ProcessAdministrationMessage(zimbraMessage);

                    break;

                case "ClubCloud.Zimbra.Administration.Extended":
                    message = await ProcessAdministrationExtendedMessage(zimbraMessage);

                    break;

                case "ClubCloud.Zimbra.Mail":
                    message = await ProcessMailMessage(zimbraMessage);

                    break;

                case "ClubCloud.Zimbra.Replication":
                    message = await ProcessReplicationMessage(zimbraMessage);

                    break;

                case "ClubCloud.Zimbra.Synchronization":
                    message = await ProcessSynchronizationMessage(zimbraMessage);

                    break;

                case "ClubCloud.Zimbra.Voice":
                    message = await ProcessVoiceMessage(zimbraMessage);

                    break;

                default:
                {
                    message = new ZimbraMessage();
                    break;
                }
                }
            }
            catch (TargetInvocationException tiex)
            {
                //bool reauthenticate = false;
                if (tiex.InnerException.GetType() == typeof(FaultException))
                {
                    if (tiex.InnerException.Message.Equals("no valid authtoken present", StringComparison.InvariantCultureIgnoreCase))
                    {
                        reauthenticate = true;
                    }
                    else
                    {
                        throw tiex;
                    }
                }
            }
            catch (FaultException fiex)
            {
                if (fiex.Message.Equals("no valid authtoken present", StringComparison.InvariantCultureIgnoreCase))
                {
                    reauthenticate = true;
                }
                else
                {
                    throw fiex;
                }
            }

            if (reauthenticate)
            {
                Authenticate();
                message = await Message(zimbraMessage);
            }

            return(message);
        }