Gearman Developer Documentation

examples/reverse_client_cb.c
Go to the documentation of this file.
00001 /* Gearman server and library
00002  * Copyright (C) 2008 Brian Aker, Eric Day
00003  * All rights reserved.
00004  *
00005  * Use and distribution licensed under the BSD license.  See
00006  * the COPYING file in the parent directory for full text.
00007  */
00008 
00014 #include <stdio.h>
00015 #include <stdlib.h>
00016 #include <string.h>
00017 #include <unistd.h>
00018 
00019 #include <libgearman/gearman.h>
00020 
00021 #define REVERSE_TASKS 10
00022 
00023 static gearman_return_t created(gearman_task_st *task);
00024 static gearman_return_t data(gearman_task_st *task);
00025 static gearman_return_t status(gearman_task_st *task);
00026 static gearman_return_t complete(gearman_task_st *task);
00027 static gearman_return_t fail(gearman_task_st *task);
00028 
00029 static void usage(char *name);
00030 
00031 int main(int argc, char *argv[])
00032 {
00033   int c;
00034   char *host= NULL;
00035   in_port_t port= 0;
00036   gearman_return_t ret;
00037   gearman_client_st client;
00038   gearman_task_st task[REVERSE_TASKS];
00039   uint32_t x;
00040 
00041   while ((c = getopt(argc, argv, "h:p:")) != -1)
00042   {
00043     switch(c)
00044     {
00045     case 'h':
00046       host= optarg;
00047       break;
00048 
00049     case 'p':
00050       port= (in_port_t)atoi(optarg);
00051       break;
00052 
00053     default:
00054       usage(argv[0]);
00055       exit(1);
00056     }
00057   }
00058 
00059   if(argc != (optind + 1))
00060   {
00061     usage(argv[0]);
00062     exit(1);
00063   }
00064 
00065   if (gearman_client_create(&client) == NULL)
00066   {
00067     fprintf(stderr, "Memory allocation failure on client creation\n");
00068     exit(1);
00069   }
00070 
00071   ret= gearman_client_add_server(&client, host, port);
00072   if (ret != GEARMAN_SUCCESS)
00073   {
00074     fprintf(stderr, "%s\n", gearman_client_error(&client));
00075     exit(1);
00076   }
00077 
00078   for (x= 0; x < REVERSE_TASKS; x++)
00079   {
00080     if (gearman_client_add_task(&client, &(task[x]), NULL, "reverse", NULL,
00081                                 (void *)argv[optind],
00082                                 (size_t)strlen(argv[optind]), &ret) == NULL ||
00083         ret != GEARMAN_SUCCESS)
00084     {
00085       fprintf(stderr, "%s\n", gearman_client_error(&client));
00086       exit(1);
00087     }
00088   }
00089 
00090   gearman_client_set_created_fn(&client, created);
00091   gearman_client_set_data_fn(&client, data);
00092   gearman_client_set_status_fn(&client, status);
00093   gearman_client_set_complete_fn(&client, complete);
00094   gearman_client_set_fail_fn(&client, fail);
00095   ret= gearman_client_run_tasks(&client);
00096   if (ret != GEARMAN_SUCCESS)
00097   {
00098     fprintf(stderr, "%s\n", gearman_client_error(&client));
00099     exit(1);
00100   }
00101 
00102   gearman_client_free(&client);
00103 
00104   return 0;
00105 }
00106 
00107 static gearman_return_t created(gearman_task_st *task)
00108 {
00109   printf("Created: %s\n", gearman_task_job_handle(task));
00110 
00111   return GEARMAN_SUCCESS;
00112 }
00113 
00114 static gearman_return_t data(gearman_task_st *task)
00115 {
00116   printf("Data: %s %.*s\n", gearman_task_job_handle(task),
00117          (int)gearman_task_data_size(task), (char *)gearman_task_data(task));
00118   return GEARMAN_SUCCESS;
00119 }
00120 
00121 static gearman_return_t status(gearman_task_st *task)
00122 {
00123   printf("Status: %s (%u/%u)\n", gearman_task_job_handle(task),
00124          gearman_task_numerator(task), gearman_task_denominator(task));
00125   return GEARMAN_SUCCESS;
00126 }
00127 
00128 static gearman_return_t complete(gearman_task_st *task)
00129 {
00130   printf("Completed: %s %.*s\n", gearman_task_job_handle(task),
00131          (int)gearman_task_data_size(task), (char *)gearman_task_data(task));
00132   return GEARMAN_SUCCESS;
00133 }
00134 
00135 static gearman_return_t fail(gearman_task_st *task)
00136 {
00137   printf("Failed: %s\n", gearman_task_job_handle(task));
00138   return GEARMAN_SUCCESS;
00139 }
00140 
00141 static void usage(char *name)
00142 {
00143   printf("\nusage: %s [-h <host>] [-p <port>] <string>\n", name);
00144   printf("\t-h <host> - job server host\n");
00145   printf("\t-p <port> - job server port\n");
00146 }