/*
Copyright 2009 Nathan Phillip Brink, Ethan Zonca, Matthew Orlando
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/>.
*/
/*
* **********************************************************************************
* Slave functions / etc resides below. Wouldn't a seperate file make this easier??
*
* Slave listens on server for a command in the format of each function...
* We need if's for returns... ==> watchdog
* **********************************************************************************
*/
int main(int argc, char *arvg[])
{
///////////////////// Semi-pseudo Slave Code ///////////////////////////
int slavestatus = 0;
if('no username in config file, no key present'){
fprintf(stderr "run distrend -c username] [emailaddr] to register")
}
if('they use a -c flag according to getopt, with 2 args'){
*key = register_user(username, email); // register_user returns a uniquely random url to a key
get("http://protofusion.org/distren/key/%s",key);
fprintf(stderr, "you registered, hopefully successfully. Invoke distrend with no args now.");
}
if('username is in conf file and key is present'){
loginuser(username);
}
if('slave recieves "start frame#, job#"'){
fprintf(stderr, "Got frame %d in job %d, preparing to render...",frame,job);
get('http://distren.protofusion.org/srv/job#.tgz');
exec('tar -xvf job#.tgz /tmp/distren/job#'); // somehow
exec_blender(jobname.blendfile, jobnum.framenum.JPG, jobnum); // (check the args, we'll need to adjust for different output formats)... set SLAVESTATUS=1 while rendering, SLAVESTATUS=2 when done
}
if(SLAVESTATUS==2){
tell_the_server("Completed");
fprintf(stderr, "Finished frame %d in job %d",framenum,jobnum);
SLAVESTATUS=0;
}
if(SLAVESTATUS==0){
tell_the_server("Idle");
fprintf(stderr, "Idle. No frames to render.");
}
while(SLAVESTATUS==1){
tell_the_server("Rendering");
fprintf(stderr, "Rendering frame %d in job %d...",framenum,jobnum);
delay(1000); // or not... this should be more event-driven, but should still give a heartbeat to the server
}
return 0;
}