/* 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 . */ #include #include /* Just some notes -- Ethan Zonca * * So I read the IRC transcript, and we need some communication and plugin (e.g., blender, povray) standards. * In addition to those standards, we should also have standards for information availability, * making statistics and remote control of each plugin or the whole system standard and common, * so other apps can grab stats from it (such as a j2me phone DistRen status app or a php web * interface). * * * * Notes from IRCness: * Server<==>Client Communication * Job initiation: * Job addition : * Client Control: system (such as drop all jobs, shutdown client, etc) * * blender_getframecount() * indigo_getframecount() always return 1... or just not bother with it? * * Upload while rendering * * */ // mySql configuration vars static char *opt_host_name = "localhost"; // Server Hostname static char *opt_user_name = "distren"; // Username static char *opt_password = "008987"; // Password static unsigned int opt_port_num = 0; // Port (or builtin if 0) static char *opt_socket_name = NULL; // Socket Name (or builtin if null) static char *opt_db_name = "distrend"; // Database name static unsigned int opt_flags = 0; // Connection flags, what are these for? static MYSQL *conn; // Pointer to the connection handler int main(int argc, char *argv[]) { // It's a happy fun mySQL party! This just test-connects to the server and does absolutely nothing else. Hopefully. /* initialize connection handler */ conn = mysql_init (NULL); if (conn == NULL) { fprintf (stderr, "mysql_init() failed (probably out of memory)\n"); return 1; } /* connect to server */ if (mysql_real_connect (conn, opt_host_name, opt_user_name, opt_password, opt_db_name, opt_port_num, opt_socket_name, opt_flags) == NULL) { fprintf (stderr, "mysql_real_connect() failed\n"); mysql_close (conn); return 1; } /* disconnect from server */ mysql_close (conn); return 0; } /* Blender Rendering Code: /////////////////////// MASTER /////////////////////////////// // MySQL Setup Code (put in common maybe) #include MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; // char *server = "localhost"; // change if/when we do the multiserver setup... then distributed mysql with ssl? haha char *user = "mysql"; char *password = "mysql"; // heh char *database = "distrend"; // check... I think this exists already on my server(s) // conn = mysql_init(NULL); if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); return (0); } // Queuer void queue(char *filename, int priority, char name, char submitter, char contact) { // Todo... store frame status in mysql tables, along with table with list of jobs/submitters/contact info/whatever else we want } ///////////////////////// SLAVE /////////////////////////////// // Execution Function void blendrend(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); // fprintf(stderr, "blender -b -o %s %s -s %d -e %d \n",output,input,sframe,eframe); } blendrend(input,output,100, 206); // arbitrary example referencing the function */