| 332 | } |
| 333 | |
| 334 | unsigned beanstalk::watch(const char* tube) |
| 335 | { |
| 336 | // �ȼ���Ƿ��Ѿ������ͬ���� |
| 337 | std::vector<char*>::iterator it = tubes_watched_.begin(); |
| 338 | for (; it != tubes_watched_.end(); ++it) { |
| 339 | if (strcmp(*it, tube) == 0) { |
| 340 | break; |
| 341 | } |
| 342 | } |
| 343 | |
| 344 | string cmdline(128); |
| 345 | cmdline.format("watch %s\r\n", tube); |
| 346 | ACL_ARGV* tokens = beanstalk_request(cmdline); |
| 347 | if (tokens == NULL) { |
| 348 | logger_error("'%s' error", cmdline.c_str()); |
| 349 | return 0; |
| 350 | } |
| 351 | if (tokens->argc < 2 || strcasecmp(tokens->argv[0], "WATCHING")) { |
| 352 | logger_error("'%s' error %s", cmdline.c_str(), tokens->argv[0]); |
| 353 | errbuf_ = tokens->argv[0]; |
| 354 | acl_argv_free(tokens); |
| 355 | close(); |
| 356 | return 0; |
| 357 | } |
| 358 | |
| 359 | unsigned n = (unsigned) atoi(tokens->argv[1]); |
| 360 | acl_argv_free(tokens); |
| 361 | |
| 362 | // �����������������ע�Ķ�����Ϊ 0���϶��dz����ˣ���Ϊ���ٻ���һ�� |
| 363 | // ȱʡ���У�default�����Դ�ʱ��Ҫ�ر����ӣ��Ծ��������뱾������� |
| 364 | // �Ĵ�����һ��������Զ��������������Իָ��������� |
| 365 | if (n == 0) { |
| 366 | logger_error("'%s' error, tube watched is 0", cmdline.c_str()); |
| 367 | errbuf_ = "watching"; |
| 368 | close(); |
| 369 | } |
| 370 | |
| 371 | // ���ӽ���ؼ����� |
| 372 | else if (it == tubes_watched_.end()) { |
| 373 | tubes_watched_.push_back(acl_mystrdup(tube)); |
| 374 | } |
| 375 | |
| 376 | return n; |
| 377 | } |
| 378 | |
| 379 | unsigned beanstalk::ignore(const char* tube) |
| 380 | { |