using System;
using Aurora.Backend.Server.Party;
using Aurora.Backend.Client.Party;

namespace Aurora.Backend.Executors
{
    public abstract class BasePartyExecutor : BaseExecutor
    {
        public BasePartyExecutor()
        {

        }

        public static BasePartyExecutor Create(ExecutorType type)
        {
            BasePartyExecutor executor = null;
            switch (type)
            {
                case ExecutorType.Client:
                    {
                        executor = new ClientPartyExecutor();
                        executor.ExecutorType = type;
                        break;
                    }
                case ExecutorType.Server:
                    {
                        executor = new HostPartyExecutor();
                        executor.ExecutorType = type;
                        break;
                    }
            }

            return executor;
        }

        public abstract void Initialize();

        public abstract void Run();

        public abstract void Close();

        public abstract void GetMembers();

        public abstract void GetQueue();

        public abstract void AddToQueue();

        public abstract void RemoveFromQueue();

    }
}