00001 #ifndef RENDERFARMCLIENT_H
00002 #define RENDERFARMCLIENT_H
00003
00004 #include "arraylist.h"
00005 #include "asset.inc"
00006 #include "bchash.inc"
00007 #include "edl.inc"
00008 #include "mutex.inc"
00009 #include "packagerenderer.h"
00010 #include "pluginserver.inc"
00011 #include "preferences.inc"
00012 #include "renderfarm.inc"
00013 #include "renderfarmclient.inc"
00014
00015 #include "thread.h"
00016
00017 class RenderFarmClient
00018 {
00019 public:
00020 RenderFarmClient(int port,
00021 char *deamon_path,
00022 int nice_value,
00023 char *config_path);
00024 ~RenderFarmClient();
00025
00026 void main_loop();
00027
00028
00029
00030
00031
00032 void kill_client();
00033
00034
00035
00036 int port;
00037 char *deamon_path;
00038
00039 int this_pid;
00040
00041 BC_Hash *boot_defaults;
00042 Preferences *boot_preferences;
00043 ArrayList<PluginServer*> *plugindb;
00044 };
00045
00046 class RenderFarmClientThread : public Thread
00047 {
00048 public:
00049 RenderFarmClientThread(RenderFarmClient *client);
00050 ~RenderFarmClientThread();
00051
00052
00053
00054 int send_request_header(int request,
00055 int len);
00056
00057
00058 int write_socket(char *data, int len);
00059 int read_socket(char *data, int len);
00060
00061 int write_int64(int64_t number);
00062 int64_t read_int64(int *error = 0);
00063 void read_string(char* &string);
00064 void abort();
00065
00066 void lock(char *location);
00067 void unlock();
00068
00069
00070
00071 void do_tuner(int socket_fd);
00072 void do_packages(int socket_fd);
00073
00074
00075 void get_command(int socket_fd, int *command);
00076 void read_preferences(int socket_fd,
00077 Preferences *preferences);
00078 void read_asset(int socket_fd, Asset *asset);
00079 void read_edl(int socket_fd,
00080 EDL *edl,
00081 Preferences *preferences);
00082 int read_package(int socket_fd, RenderPackage *package);
00083 int send_completion(int socket_fd);
00084 void ping_server();
00085 void init_client_keepalive();
00086
00087 void main_loop(int socket_fd);
00088 void run();
00089
00090
00091 int socket_fd;
00092
00093 RenderFarmClient *client;
00094
00095 double frames_per_second;
00096 Mutex *mutex_lock;
00097 RenderFarmWatchdog *watchdog;
00098 RenderFarmKeepalive *keep_alive;
00099
00100 int pid;
00101 };
00102
00103
00104
00105
00106
00107
00108
00109 class FarmPackageRenderer : public PackageRenderer
00110 {
00111 public:
00112 FarmPackageRenderer(RenderFarmClientThread *thread,
00113 int socket_fd);
00114 ~FarmPackageRenderer();
00115
00116
00117 int get_result();
00118 void set_result(int value);
00119 void set_progress(int64_t total_samples);
00120 int set_video_map(int64_t position, int value);
00121
00122
00123 int socket_fd;
00124 RenderFarmClientThread *thread;
00125 };
00126
00127
00128
00129
00130
00131
00132
00133
00134 class RenderFarmKeepalive : public Thread
00135 {
00136 public:
00137 RenderFarmKeepalive(RenderFarmClientThread *client_thread);
00138 ~RenderFarmKeepalive();
00139
00140 void run();
00141
00142 RenderFarmClientThread *client_thread;
00143 int done;
00144 };
00145
00146
00147
00148
00149
00150
00151
00152 #endif