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); }
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); }