Changeset - 8b67a70070ef
[Not reviewed]
default
0 1 0
LordOfWar - 16 years ago 2009-07-04 15:21:03

Fixed a syntax error, changing curvy brackets to parenthesis

added a frameset structure

adjusted the job_builder and frame_finder functions to use the new structure

prepared to start a function called status_report_generator, this function will scan all the jobs and figure out how done they are

preparing to:
add code to the frame_finder function to scan all the jobs and then run the job of highest priority. Then I will add code to the status_report_generate to change the priority of the job to something the frame_finder won't look it if the job is completed.
1 file changed with 45 insertions and 22 deletions:
0 comments (0 inline, 0 general)
src/server/distrend.c
Show inline comments
 
@@ -49,6 +49,20 @@ struct {
 
  struct frameset **frameset; // What exactly is this now? hehe
 
} blendjob[max];
 

	
 
// -- Matthew's handywork --
 
// struct for storing informaiton on each frame for a particular blender job
 
struct {
 
	int frame_num; // frame number to render
 
	char slave_name; // user that frame is assigned to
 
	int frame_status; // status of frame, 0= unassigned, 1= taken, 2= done
 

	
 
	// For secondary upload location...
 
	char url;
 
	char login_name;
 
	char login_pass;
 
} frameset[frame_count];
 
// -- end of Matthew's handywork --
 

	
 
struct {
 
  char *name;
 
  char *submitter;
 
@@ -83,12 +97,12 @@ we get a key generated on the server, an
 
  while(cont)
 
    {
 
      struct distren_action *action;
 
      
 

	
 
      distrend_accept(&action);
 
      cont = distrend_do(action);
 
      distrend_action_free(action);
 
    }
 
  
 

	
 
  distrend_unlisten(listenset);
 
  distrend_config_free(config);
 

	
 
@@ -99,15 +113,15 @@ struct distrend_config
 
{
 
  cfg_t *mycfg;
 
  struct options_common *options;
 
  
 

	
 
  struct distrend_listen **listens; /*< Null terminated array of structs */
 
  
 

	
 
}
 
  
 

	
 

	
 
int distrend_do_config(int argc, char *argv[], struct distrend_config *config)
 
{
 
  cfg_opt_t myopts = 
 
  cfg_opt_t myopts =
 
    {
 
      CFG_SEC("listen",  /* this must be imported into struct listens (which must still be declared) */
 
    {
 
@@ -121,17 +135,17 @@ int distrend_do_config(int argc, char *a
 

	
 
  config = malloc(sizeof(struct distrend_config));
 
  options_init(argc, argv, &config->mycfg, &myopts, "server", &config->options);
 
  
 

	
 
  return 0;
 
}
 
int distrend_config_free(struct distrend_config *config)
 
{
 
  options_free(config->options);
 
  free(config);
 
  
 

	
 
  return 0;
 
}
 
  
 

	
 

	
 
// Registration on server. Needs attention. (e.g., people could make tons of accounts with the key we give them...
 
// Set up distrend -c username email@example.com
 
@@ -243,32 +257,41 @@ void loginuser(char *username, int secre
 

	
 

	
 
/* This function creates frame array based on the total number of frames to be rendered, which will then be parsed by function frame_farmer. */
 
void frame_array_builder(int sframe, int eframe) {
 
	int total = eframe + 1;
 
	int x = sframe;
 
	blendjob[jobnum].frameset[total];
 
void frame_num_struct_builder(int jobnum, int sframe, int eframe) {
 
	int total = sframe - eframe;
 
	int fcount = sframe; // Used to create all the frames in the structure from sframe to eframe
 
	int x = 0;
 

	
 
	while(x <= eframe){
 
		blendjob[jobnum].frameset[x]=0;
 
	while(x < total){
 
		blendjob[jobnum].frameset[x].frame_num = fcount;
 
		x++;
 
		fcount++;
 
	}
 
}
 

	
 
// matches your computer up with a lovely frame to render
 
int frame_finder(){
 
	int your_frame = 0;  // your_frame is an interger value that will be given to the client as the frame number to render
 
	int your_frame = null;  // your_frame is an interger value that will be given to the client as the frame number to render
 
	int x = 0; // the frameset number
 

	
 
	while(your_frame < eframe){ // this finds a frame with the value of zero, which is a frame that is ready to be rendered
 
		if (blendjob[jobnum].frameset[your_frame] = 0)
 
	while(your_frame <= (sframe - eframe)){ // Finds the frameset number with a frame that needs to be rendered
 
		if (blendjob[jobnum].frameset[x].frame_status = 0)
 
			break;
 
	}
 

	
 
		your_frame++;
 
	}
 
blendjob[jobnum].frameset[your_frame]++; // sets the value of the frame to 2, which means its taken
 
blendjob[jobnum].frameset[x].frame_status++; // sets the value of the frame to 2, which means its taken
 

	
 
your_frame = blendjob[jobnum].frameset[x].frame_num; //  Takes the frameset found in the while statement above, and extracts the frame number from it and assigns it to the int your_frame
 

	
 
return your_frame; // your_frame is returned as the frame to be rendered
 
}
 

	
 
// This figures out how much of the job is done, where jobnum corresponds to the job number
 
// This uses pointers, so when it is run it updates certain values in memory
 
void status_report_generator(int jobnum){
 

	
 
}
 

	
 
// This function makes the value of the frame 2, which means its completed.
 
void the_finisher(int frame){
 
	blendjob[jobnum].frameset[frame]++;
 
@@ -329,7 +352,7 @@ void exec_blender(char *input, char *out
 
  ret = execv("/usr/bin/blender", cmd);
 

	
 
  // OHNOBINKI! ... check this... Its supposed to send a command back to the server and run the_finisher(); function which sets the frame status to complete.
 
  fprintf{stdin, the_finisher(frame)};
 
  fprintf(stdin, the_finisher(frame));
 

	
 
void exec_luxrender_single(char *input, char *output) {
 
  int ret;
0 comments (0 inline, 0 general)