| 483 | } |
| 484 | |
| 485 | HHttpService New(const Params* params) |
| 486 | { |
| 487 | HttpService* service = new HttpService; |
| 488 | |
| 489 | service->m_HttpCache = params->m_HttpCache; |
| 490 | |
| 491 | int threadcount = params->m_ThreadCount; |
| 492 | #if defined(__NX__) |
| 493 | if (threadcount > 2) |
| 494 | threadcount = 2; |
| 495 | #endif |
| 496 | |
| 497 | service->m_Run = true; |
| 498 | dmMessage::NewSocket(HTTP_SOCKET_NAME, &service->m_Socket); |
| 499 | service->m_Workers.SetCapacity(threadcount); |
| 500 | for (uint32_t i = 0; i < threadcount; ++i) |
| 501 | { |
| 502 | Worker* worker = new Worker(); |
| 503 | char tmp[128]; |
| 504 | dmSnPrintf(tmp, sizeof(tmp), "@__http_worker_%d", i); |
| 505 | dmMessage::NewSocket(tmp, &worker->m_Socket); |
| 506 | worker->m_Client = 0; |
| 507 | memset(&worker->m_CurrentURL, 0, sizeof(worker->m_CurrentURL)); |
| 508 | memset(&worker->m_CurrentProxyURL, 0, sizeof(worker->m_CurrentProxyURL)); |
| 509 | worker->m_Request = 0; |
| 510 | worker->m_Status = 0; |
| 511 | worker->m_Service = service; |
| 512 | worker->m_CacheFlusher = i == 0 && worker->m_Service->m_HttpCache != 0; |
| 513 | worker->m_Run = true; |
| 514 | worker->m_Canceled = 0; |
| 515 | worker->m_ReportProgress = false; |
| 516 | service->m_Workers.Push(worker); |
| 517 | |
| 518 | dmThread::Thread t = dmThread::New(&Loop, THREAD_STACK_SIZE, worker, "http"); |
| 519 | worker->m_Thread = t; |
| 520 | } |
| 521 | |
| 522 | dmThread::Thread t = dmThread::New(&LoadBalancer, THREAD_STACK_SIZE, service, "http_balance"); |
| 523 | service->m_Balancer = t; |
| 524 | |
| 525 | service->m_ReportProgressCallback = params->m_ReportProgressCallback; |
| 526 | |
| 527 | return service; |
| 528 | } |
| 529 | |
| 530 | dmMessage::HSocket GetSocket(HHttpService http_service) |
| 531 | { |
no test coverage detected