Files @ d08cb4e85672
Branch filter:

Location: DistRen/src/server/distrend.c

ethanzonca@localhost.localdomain
Removed pointless code, added newer code that has some issues, but my brain is dead.
/*
  Copyright 2008 Nathan Phillip Brink, Ethan Zonca

  This file is a part of DistRen.

  DistRen is free software: you can redistribute it and/or modify
  it under the terms of the GNU Affero General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  DistRen is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU Affero General Public License for more details.

  You should have received a copy of the GNU Affero General Public License
  along with DistRen.  If not, see <http://www.gnu.org/licenses/>.

*/

#include <mysql.h>
#include <stdio.h>

 /* Just some notes -- Ethan Zonca
 * ++ Make data availible for other apps to parse
 * Server<==>Client Communication
 * Upload while rendering
 */

#define max 100
 // maximum number of stored jobs in memory, per job type (lux/blend). Eventually we can dump this data to disk, or atleast the remainder not in memory...
int jobnum = 0;

// Structures for storing job information
// tweak char lengths to save on mem?
typedef struct {
  char name[64];
  char submitter[64];
  char email[128];
  int priority;
  struct frameset **frameset; // array of frames as big as the total number of frames. Every value should be null/0 to start out with. Values can be changed to reflect frame render status.
} blendjob[max];

typedef struct {
  char name[64];
  char submitter[64];
  char email[128];
  int priority;
  int mode; // 0 = Static Render, stop at Spp, or infinity if spp is null? Framerange is ignored.; 1 = animation, stop at Spp and stay in framerange.
  int spp;
  struct frameset ** frameset;
} luxjob[max];





int main(int argc, char *argv[])
{




// frame[frame] Assignments:
//  "0" - cancelled
//  "1" - unassigned
//  "2" - assigned to slave
//  "3" - completed by slave and uploaded
// Have a script crawl through each job in the arrays, ordered by priority?, and assign a certain number of frames to each slave.
// Then we will need some sort of watchdog to monitor slaves on the main server to check for stales.



// Queuer: this function should add files to the queue
// Type: 0 = blender, 1 = lux
// jobnum is the current job number
void queue(int type, char *name, char *submitter, char *email, int priority, int mode, int spp, int **frameset) {

if(type == 1){
  blendjob[jobnum].name = name;
  blendjob[jobnum].submitter = submitter;
  blendjob[jobnum].email = email;
  blendjob[jobnum].priority = priority;
  blendjob[jobnum].frameset =  frameset[frames]; // pointer? will this work?
}

if(type == 2){
  luxjob[jobnum].name = name;
  luxjob[jobnum].submitter = submitter;
  luxjob[jobnum].email = email;
  luxjob[jobnum].priority = priority;
  luxjob[jobnum].mode = mode;
  luxjob[jobnum].spp = spp;
  luxjob[jobnum].frameset = frameset[frames];
  // handle lux modes somehow.
}

else{
// Throw error.
}

jobnum++;
}











///////////////////////// SLAVE ///////////////////////////////

// Slave listens on server for a command in the format of each function...
// We need if's for returns... ==> watchdog



// Executors

void exec_blender(char *input, char *output, int sframe, int eframe) {
  int ret;
  char *cmd[] = { "blender", "-b", "-o", output, input, "-s", sframe, "-e", eframe, (char *)0 };
  ret = execv ("/usr/bin/blender", cmd);
}

void exec_luxrender_single(char *input, char *output) {
  int ret;
  char *cmd[] = { "luxrender", "-something", "something", "something", (char *)0 };
  ret = execv {"/usr/bin/luxrender", cmd);
}

void exec_luxrender_anim(char *input, char *output, int sframe, int eframe, int spp) {
// spp is samples per pixel limitation on each frame
  int ret;
  char *cmd[] = { "luxrender", "-something", "something", "something", (char *)0 };
  ret = execv {"/usr/bin/luxrender", cmd);
}

void exec_imagemagick {char *input, char *output, char *opts) {
  int ret;
  char *cmd[] = { "imagemagick", "-something", "something", "something", (char *)0 };
  ret = execv {"/usr/bin/imagemagick", cmd);
}











  return 0;
}