| 385 | |
| 386 | print("Example 23") |
| 387 | class AsyncClientSession: |
| 388 | def __init__(self, send, receive, secret): |
| 389 | self.send = send |
| 390 | self.receive = receive |
| 391 | self.secret = secret |
| 392 | self.last_distance = None |
| 393 | |
| 394 | |
| 395 | print("Example 24") |
| 396 | async def request_number(self): |
| 397 | await self.send("NUMBER") # Changed |
| 398 | data = await self.receive() # Changed |
| 399 | return int(data) |
| 400 | |
| 401 | |
| 402 | print("Example 25") |
| 403 | async def report_outcome(self, number): # Changed |
| 404 | new_distance = math.fabs(number - self.secret) |
| 405 | |
| 406 | if new_distance == 0: |
| 407 | decision = CORRECT |
| 408 | elif self.last_distance is None: |
| 409 | decision = UNSURE |
| 410 | elif new_distance < self.last_distance: |
| 411 | decision = WARMER |
| 412 | elif new_distance > self.last_distance: |
| 413 | decision = COLDER |
| 414 | else: |
| 415 | decision = SAME |
| 416 | |
| 417 | self.last_distance = new_distance |
| 418 | |
| 419 | await self.send(f"REPORT {decision}") # Changed |
| 420 | return decision |
| 421 | |
| 422 | |
| 423 | print("Example 26") |
| 424 | async def __aiter__(self): # Changed |
| 425 | while True: |
| 426 | number = await self.request_number() # Changed |
| 427 | decision = await self.report_outcome(number) # Changed |
| 428 | yield number, decision |
| 429 | if decision == CORRECT: |
| 430 | return |
| 431 | |
| 432 | |
| 433 | print("Example 27") |