1 #ifndef RENDERFARMCLIENT_H
2 #define RENDERFARMCLIENT_H
6 #include "defaults.inc"
8 #include "packagerenderer.h"
9 #include "pluginserver.inc"
10 #include "preferences.inc"
11 #include "renderfarmclient.inc"
12 #include "renderfarmfsclient.inc"
15 // The render client waits for connections from the server.
16 // Then it starts a thread for each connection.
17 class RenderFarmClient
20 RenderFarmClient(int port
,
29 // After a socket times out, kill the render node.
32 RenderFarmClientThread
*thread
;
36 // PID to be returned to background render object
38 // The plugin paths must be known before any threads are started
39 Defaults
*boot_defaults
;
40 Preferences
*boot_preferences
;
41 ArrayList
<PluginServer
*> *plugindb
;
44 // When a connection is opened, the thread forks to handle the rendering session.
45 // A fork instead of a thread is used to avoid reentrancy problems with the
46 // codecs, but we still need a thread to join the process.
48 // The fork requests jobs from the server until the job table is empty
49 // or the server reports an error. This fork must poll the server
50 // after every frame for the error status.
51 // Detaches when finished.
52 class RenderFarmClientThread
: Thread
55 RenderFarmClientThread(RenderFarmClient
*client
);
56 ~RenderFarmClientThread();
58 // Commands call this to send the request packet.
59 // The ID of the request followed by the size of the data that follows is sent.
60 int send_request_header(int request
,
62 int write_socket(char *data
, int len
, int timeout
);
63 int read_socket(char *data
, int len
, int timeout
);
64 void read_string(int socket_fd
, char* &string
);
65 void lock(char *location
);
72 void RenderFarmClientThread::read_preferences(int socket_fd
,
73 Preferences
*preferences
);
74 void read_asset(int socket_fd
, Asset
*asset
);
75 void read_edl(int socket_fd
,
77 Preferences
*preferences
);
78 int read_package(int socket_fd
, RenderPackage
*package
);
79 int send_completion(int socket_fd
);
81 void main_loop(int socket_fd
);
84 // Everything must be contained in run()
87 RenderFarmClient
*client
;
88 RenderFarmFSClient
*fs_client
;
89 double frames_per_second
;
104 class FarmPackageRenderer
: public PackageRenderer
107 FarmPackageRenderer(RenderFarmClientThread
*thread
,
109 ~FarmPackageRenderer();
113 void set_result(int value
);
114 void set_progress(int64_t total_samples
);
115 void set_video_map(int64_t position
, int value
);
119 RenderFarmClientThread
*thread
;