Ejemplo n.º 1
0
        public Server(IPAddress serverIp)
        {
            Workers     = new List <WorkerInfo>();
            Clients     = new List <Uri>();
            TaskService = new ServerTaskService(this);
            ClientRegistrationService = new ClientRegistrationService(this);
            WorkerRegistrationService = new WorkerRegistrationService(this);
            ConnectionControl         = new ServerConnectionControl(this);
            TaskLibraryManager        = new TaskLibraryManager();
            TaskLibraryManager.Load();
            bool hostCreated = false;

            while (!hostCreated)
            {
                try
                {
                    ServerUri           = RemoteConnection.CreateUri(serverIp, Port++);
                    CheckConnectionHost = RemoteConnection.CreateHost(UriTemplates.CreateCheckConnectionUri(ServerUri), typeof(ICheckConnection), typeof(CheckConnection));
                    hostCreated         = true;
                }
                catch
                {
                }
            }
            TaskServiceHost        = RemoteConnection.CreateHost(UriTemplates.CreateTasksUri(ServerUri), typeof(IServerTaskService), TaskService);
            ClientRegistrationHost = RemoteConnection.CreateHost(UriTemplates.CreateClientRegistrationUri(ServerUri), typeof(IClientRegistrationService), ClientRegistrationService);
            WorkerRegistrationHost = RemoteConnection.CreateHost(UriTemplates.CreateWorkerRegistrationUri(ServerUri), typeof(IWorkerRegistrationService), WorkerRegistrationService);
            TaskLibraryHost        = RemoteConnection.CreateHost(UriTemplates.CreateLibrariesUri(ServerUri), typeof(IDistributedTaskLibraryService), typeof(DistributedTaskLibraryService));
            CheckConnectionHost    = RemoteConnection.CreateHost(UriTemplates.CreateCheckConnectionUri(ServerUri), typeof(ICheckConnection), typeof(CheckConnection));
            CheckConnectionHost.Open();
            WorkerRegistrationHost.Open();
            TaskLibraryHost.Open();
        }
 public ClientServerConnection(IPAddress localIp, IPAddress serverIp, int serverPort) : base(localIp, serverIp, serverPort)
 {
     Logging.WriteLog("Connecting to server on " + ServerUri);
     DistributedTaskLibraryHost = RemoteConnection.CreateHost(UriTemplates.CreateLibrariesUri(LocalUri), typeof(IDistributedTaskLibraryService), typeof(DistributedTaskLibraryService));
     DistributedTaskLibraryHost.Open();
     try
     {
         var registration = RemoteConnection.CreateProxy <IClientRegistrationService>(UriTemplates.CreateClientRegistrationUri(ServerUri));
         registration.Connect(LocalUri);
     }
     catch (Exception e)
     {
         DistributedTaskLibraryHost.Close();
         Dispose();
         throw new NoServerConnectionException();
     }
     ConnectionControl = new ConnectionControl(this, ServerUri);
 }
Ejemplo n.º 3
0
        public int CreateTask(DistributedTaskLibrary distributedLibrary)
        {
            int taskId  = -1;
            var Service = RemoteConnection.CreateProxy <IDistributedTaskLibraryService>(UriTemplates.CreateLibrariesUri(distributedLibrary.Holder));

            lock (Locker)
            {
                File.WriteAllBytes("temp", Service.Get(distributedLibrary.Files[0]));
                var  assembly    = Assembly.LoadFrom("temp");
                Type processType = assembly.GetTypes().Where(type => type.Name == distributedLibrary.ProcessTypeName).First();
                for (int i = 0; i < Tasks.Count; i++)
                {
                    if (Tasks[i].Process == processType)
                    {
                        taskId = i;
                        break;
                    }
                }
            }
            if (taskId == -1)
            {
                int    i = 1;
                string folder;
                if (!Directory.Exists(Folder))
                {
                    Directory.CreateDirectory(Folder);
                }
                while (Directory.Exists(folder = (Folder + "/" + "task" + i)))
                {
                    i++;
                }
                Directory.CreateDirectory(folder);
                List <string> files = new List <string>();
                foreach (string filename in distributedLibrary.Files)
                {
                    string name = folder + "/" + new DirectoryInfo(filename).Name;
                    File.WriteAllBytes(name, Service.Get(filename));
                    files.Add(name);
                }
                Tasks.Add(new TaskLibrary(files, distributedLibrary.ProcessTypeName));
                taskId = Tasks.Count - 1;
                Save();
            }
            return(taskId);
        }