Go to the documentation of this file.00001
00002
00003
00004
00005
00006
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 }