示例#1
0
 public void AddProject(RenderProject project)
 {
     project.ProjectId = (RenderProject.NextProjectId++);
     project.Owner     = User;
     project.GenerateRenderJobs();
     ServerServices.AddProject(project);
 }
示例#2
0
        public void Startup()
        {
            ServerServices.AddMessage(0, "Unlimited nodes.");

            CheckTimeoutThread = new Thread(CheckTimeout);
            CheckTimeoutThread.IsBackground = true;
            CheckTimeoutThread.Start();

            ServerServices.AddMessage(0, "Starting up...");
            ServerServices.AddMessage(0, "Finding LW supported file formats...");
            LoadFileFormats();
            ServerServices.AddMessage(0, "Setting up the server...");
            SetupService();
            AutoSetupServer = new BroadcastListener(Port);
            ServerServices.AddMessage(0, "Autodiscovery server running at UDP port 61111");

            if (OfferWeb)
            {
                WebServer = new WebServer(this, OfferWebPort);
            }

            foreach (MapDrive mapDrive in _mappedDrives)
            {
                mapDrive.Mount();
            }
        }
示例#3
0
 private void CheckTimeout()
 {
     while (true)
     {
         Thread.Sleep(300);
         ServerServices.CheckTimedOutClients();
     }
 }
示例#4
0
        private void SetupService()
        {
            if (AutoOfferPort)
            {
                for (Port = 2080; Port < 60000; Port++)
                {
                    try
                    {
                        BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
                        serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
                        BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();
                        IDictionary props = new Hashtable();

                        props["port"] = Port;
                        Channel       = new TcpChannel(props, clientProv, serverProv);
                        break;
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex, "Error finding free port");
                    }
                }
            }
            else
            {
                try
                {
                    BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
                    serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
                    BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();
                    IDictionary props = new Hashtable();

                    props["port"] = Port;
                    Channel       = new TcpChannel(props, clientProv, serverProv);
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Error opening TCP channel");
                    ServerServices.AddMessage(1, "Cannot use port " + Port);
                    return;
                }
            }

            ChannelServices.RegisterChannel(Channel, false);
            // Register ServerServices
            if (!RemotingConfiguration.IsActivationAllowed(typeof(ServerServices)))
            {
                RemotingConfiguration.RegisterActivatedServiceType(typeof(ServerServices));
            }
            // Register MasterServer
            if (!RemotingConfiguration.IsActivationAllowed(typeof(MasterServer)))
            {
                RemotingConfiguration.RegisterActivatedServiceType(typeof(MasterServer));
            }
            ServerServices.AddMessage(0, "Server running at port " + Port);
        }
示例#5
0
 public void Shutdown()
 {
     foreach (MapDrive mapDrive in _mappedDrives)
     {
         mapDrive.Unmount();
     }
     ServerServices.SaveAllNodeConfig();
     ChannelServices.UnregisterChannel(Channel);
     AddMessage(0, "Shutting down...");
 }
示例#6
0
 public EventBridge(ServerServices.StatusClientChange clientStatus,
     ServerServices.StatusProjectChange projectStatus,
     ServerServices.StatusFinishedChange finishedStatus,
     ServerServices.StatusFinishedFrameChange imagePreview,
     ServerServices.StatusStringChange messageConsumer,
     SendLogJob.LogReceiver logReceiver)
 {
     _clientStatus = clientStatus;
     _projectStatus = projectStatus;
     _finishedStatus = finishedStatus;
     _imagePreview = imagePreview;
     _messageConsumer = messageConsumer;
     _logReceiver = logReceiver;
 }
示例#7
0
        public void ReplaceConfigs(List <ConfigSet> configs)
        {
            MemoryStream    stream    = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();

            formatter.Serialize(stream, configs);
            stream.Position = 0;
            List <ConfigSet> newConfigs = (List <ConfigSet>)formatter.Deserialize(stream);

            stream.Dispose();

            ServerServices.Configs = newConfigs;
            ServerServices.CheckClientConfigs();
        }
示例#8
0
        public WebServer(MasterServer server, int port)
        {
            _server = server;

            try
            {
                _listener = new TcpListener(IPAddress.Any, port);
                _listener.Start(10);
                _needToStop     = false;
                _threadListener = new Thread(StartAccepting);
                _threadListener.IsBackground = true;
                _threadListener.Start();
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Cannot start web server: " + ex);
                ServerServices.AddMessage(1, "Cannot start web server on port " + port);
                return;
            }
            ServerServices.AddMessage(0, "Web server ready to accept connections on port " + port);
        }
示例#9
0
 private bool AttemptServerConnect(string server, int port)
 {
     for (int i = 0; i < 3; i++)
     {
         try
         {
             _server = (ServerServices)Activator.CreateInstance(typeof(ServerServices), null,
                                                                new object[] { new UrlAttribute("tcp://" + server + ":" + port) });
             if (_server.IsWorking())
             {
                 return(true);
             }
             Thread.Sleep(100);
         }
         catch (Exception ex)
         {
             _server = null;
             logger.Error(ex, "Error connecting to the server");
         }
     }
     return(false);
 }
示例#10
0
 public void SetClientActivationTime(int id, string activationTime)
 {
     ServerServices.SetClientActivationTime(id, activationTime);
 }
示例#11
0
 public void SetClientConfig(int id, int newConfig)
 {
     ServerServices.SetClientConfig(id, newConfig);
 }
示例#12
0
 public void SetClientPriority(int id, ProcessPriorityClass priority)
 {
     ServerServices.SetClientPriority(id, priority);
 }
示例#13
0
 public void ResumeProject(int id)
 {
     ServerServices.ResumeProject(id);
 }
示例#14
0
 public void AddFinishedStatus(ServerServices.StatusFinishedChange finishedStatus)
 {
     _finishedStatus = finishedStatus;
     ServerServices.FinishedStatus += finishedStatus;
 }
示例#15
0
 public List <string> GetOldMessages()
 {
     return(ServerServices.GetOldMessages());
 }
示例#16
0
 public void AddProjectStatus(ServerServices.StatusProjectChange projectStatus)
 {
     _projectStatus = projectStatus;
     ServerServices.ProjectStatus += projectStatus;
 }
示例#17
0
 public void AddMessageConsumer(ServerServices.StatusStringChange messageConsumer)
 {
     _messageConsumer = messageConsumer;
     ServerServices.MessageConsumer += messageConsumer;
 }
示例#18
0
 public void AddImagePreview(ServerServices.StatusFinishedFrameChange imagePreview)
 {
     _imagePreview = imagePreview;
     ServerServices.ImagePreviewStatus += imagePreview;
 }
示例#19
0
        private void ConnectToServer(object obj)
        {
            if (Settings.ServerHost == "" || Settings.AutoServerFinder)
            {
                BroadcastFinder finder = new BroadcastFinder();
                Settings.ServerPort = finder.Port;
                Settings.ServerHost = finder.Server;
            }

            if (_channel == null)
            {
                _channel = new TcpChannel();
                ChannelServices.RegisterChannel(_channel, false);
            }

            for (int i = 0; i < 10; i++)
            {
                try
                {
                    _server = (ServerServices)Activator.CreateInstance(typeof(ServerServices), null,
                                                 new object[]
                                                     {
                                                         new UrlAttribute("tcp://" + Settings.ServerHost + ":" +
                                                                          Settings.ServerPort)
                                                     });
                    if (_server.IsWorking())
                        break;
                    Thread.Sleep(100);
                }
                catch (Exception)
                {
                    _server = null;
                    // Don't log this error as this is expected if the server isn't runningB
                }
            }

            if (_server == null)
            {
                if (_setupToDo)
                    AddMessage(1, "Cannot connect to the server. Will retry in 5 seconds.");

                Thread.Sleep(5000);
                ThreadPool.QueueUserWorkItem(ConnectToServer);
            }
            else
            {
                lock (_lock)
                {
                    int bitsize = Environment.Is64BitOperatingSystem ? 64 : 32;
                    _server.RegisterClient(Environment.MachineName, GetIP(), Settings.RenderPriority, bitsize);
                }
                AddMessage(0, "Connected to the server " + Settings.ServerHost + " on port " + Settings.ServerPort + ".");
                try
                {
                    if (_setupToDo)
                        _server.SetCurrentJob("Starting up");
                }
                catch (Exception ex)
                {
                    _server = null;
                    if (_setupToDo)
                        AddMessage(1, "Cannot connect to the server. Will retry in 5 seconds.");
                    Thread.Sleep(5000);
                    ThreadPool.QueueUserWorkItem(ConnectToServer);
                    logger.Error(ex, "Error connecting to the server");
                }
            }
        }
示例#20
0
 public List <ClientConnection> GetConnectedHosts()
 {
     return(ServerServices.GetConnectedHosts());
 }
示例#21
0
 public void AddClientStatus(ServerServices.StatusClientChange clientStatus)
 {
     _clientStatus = clientStatus;
     ServerServices.ClientStatus += clientStatus;
 }
示例#22
0
 public List <FinishedFrame> GetOldFrames()
 {
     return(ServerServices.GetOldFrames());
 }
示例#23
0
 public void AddPriorityJob(int clientId, Job j)
 {
     ServerServices.AddPriorityJob(clientId, j);
 }
示例#24
0
 public List <RenderProject> GetProjects()
 {
     return(ServerServices.GetProjects());
 }
示例#25
0
 public RenderProject GetProject(int projectId)
 {
     return(ServerServices.GetProject(projectId));
 }
示例#26
0
 public void PauseProject(int id)
 {
     ServerServices.PauseProject(id);
 }
示例#27
0
 public bool IsProjectPaused(int id)
 {
     return(ServerServices.IsProjectPaused(id));
 }
示例#28
0
 public void StopProject(int id)
 {
     ServerServices.StopProject(id);
 }
示例#29
0
 public void ResumeClient(int id)
 {
     ServerServices.ResumeClient(id);
 }
示例#30
0
 public ProcessPriorityClass GetClientPriority(int id)
 {
     return(ServerServices.GetClientPriority(id));
 }
示例#31
0
        private void RetreiveJobs()
        {
            if (_server == null)
                return;
            try
            {
                if (_server.KeepAlive() == false)
                {
                    try
                    {
                        _server.Unregister();
                    }
                    catch (Exception ex)
                    {
                        logger.Error(ex, "Error server.Unregister");
                    }

                    _server = null;
                    ThreadPool.QueueUserWorkItem(ConnectToServer);
                    return;
                }

                // Checks if we have any priority jobs to execute. If yes do it ASAP
                if (_server.HasPriorityJobs())
                {
                    List<Job> newJobs = _server.GetPriorityJobs();
                    foreach (Job j in newJobs)
                    {
                        j.SetServer(_server);
                        j.ExecuteJob(AddMessage, _jobs);
                    }
                }

                lock (_jobs)
                {
                    if (_setupToDo)
                        DoSetup();
                    else if (!_readyToStart && !_setupToDo && _jobs.Count == 0)
                    {
                        AddMessage(0, "Client ready.");
                        _setupTime.Stop();
                        AddMessage(0, "Startup and setup took " + _setupTime.Elapsed.TotalSeconds + " sec(s).");
                        _readyToStart = true;
                    }
                    else if (_jobs.Count > 0)
                        return;
                }

                if (IsWorking)
                    return;
                // Checks if we have new jobs to do
                if (_server.HasJobs())
                {
                    // If yes, lock the jobs queue and add the new one
                    lock (_jobs)
                    {
                        List<Job> newJobs = _server.GetJobs();
                        foreach (Job j in newJobs)
                            _jobs.Enqueue(j);
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Error retrieving jobs");
                try
                {
                    if (_server != null) _server.KeepAlive();
                }
                catch
                {
                    _server = null;
                    AddMessage(1, "Lost contact with Server");
                    ThreadPool.QueueUserWorkItem(ConnectToServer);
                }
            }
        }
示例#32
0
 public void PauseClient(int id)
 {
     ServerServices.PauseClient(id);
 }
示例#33
0
 public void RemoveFinished(RenderProject project)
 {
     ServerServices.RemoveFinished(project, true);
 }
示例#34
0
 public bool IsClientPaused(int id)
 {
     return(ServerServices.IsClientPaused(id));
 }
示例#35
0
 public void RemoveAllFinished()
 {
     ServerServices.RemoveAllFinished(true);
 }
示例#36
0
 public string GetClientActivationTime(int id)
 {
     return(ServerServices.GetClientActivationTime(id));
 }
示例#37
0
 public void ReplaceProject(int projectId, RenderProject project)
 {
     project.GenerateRenderJobs();
     ServerServices.ReplaceProject(projectId, project);
 }
示例#38
0
 public void AddMessage(int icon, string msg)
 {
     ServerServices.AddMessage(icon, msg);
 }
示例#39
0
 private bool AttemptServerConnect(string server, int port)
 {
     for (int i = 0; i < 3; i++)
     {
         try
         {
             _server = (ServerServices) Activator.CreateInstance(typeof (ServerServices), null,
                 new object[] {new UrlAttribute("tcp://" + server + ":" + port)});
             if (_server.IsWorking())
                 return true;
             Thread.Sleep(100);
         }
         catch (Exception ex)
         {
             _server = null;
             logger.Error(ex, "Error connecting to the server");
         }
     }
     return false;
 }