| 78 | } |
| 79 | |
| 80 | bool processRequest(const TcpConnectionPtr& conn, const string& request) |
| 81 | { |
| 82 | string id; |
| 83 | string puzzle; |
| 84 | bool goodRequest = true; |
| 85 | |
| 86 | string::const_iterator colon = find(request.begin(), request.end(), ':'); |
| 87 | if (colon != request.end()) |
| 88 | { |
| 89 | id.assign(request.begin(), colon); |
| 90 | puzzle.assign(colon+1, request.end()); |
| 91 | } |
| 92 | else |
| 93 | { |
| 94 | puzzle = request; |
| 95 | } |
| 96 | |
| 97 | if (puzzle.size() == implicit_cast<size_t>(kCells)) |
| 98 | { |
| 99 | threadPool_.run(std::bind(&solve, conn, puzzle, id)); |
| 100 | } |
| 101 | else |
| 102 | { |
| 103 | goodRequest = false; |
| 104 | } |
| 105 | return goodRequest; |
| 106 | } |
| 107 | |
| 108 | static void solve(const TcpConnectionPtr& conn, |
| 109 | const string& puzzle, |