• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

sirn-se / websocket-php / 5610959835

pending completion
5610959835

push

github

Sören Jensen
Middleware support

14 of 14 new or added lines in 4 files covered. (100.0%)

283 of 676 relevant lines covered (41.86%)

1.66 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Middleware/CloseHandler.php
1
<?php
2

3
/**
4
 * Copyright (C) 2014-2023 Textalk and contributors.
5
 *
6
 * This file is part of Websocket PHP and is free software under the ISC License.
7
 * License text: https://raw.githubusercontent.com/sirn-se/websocket-php/master/COPYING.md
8
 */
9

10
namespace WebSocket\Middleware;
11

12
use Psr\Log\LoggerAwareInterface;
13
use Psr\Log\LoggerAwareTrait;
14
use WebSocket\Connection;
15
use WebSocket\Message\{
16
    Close,
17
    Message
18
};
19

20
/**
21
 * WebSocket\Middleware\CloseHandler class.
22
 * Handles close procedure.
23
 */
24
class CloseHandler implements LoggerAwareInterface, ProcessIncomingInterface, ProcessOutgoingInterface
25
{
26
    use LoggerAwareTrait;
27

28
    public function processIncoming(ProcessStack $stack, Connection $connection): Message
29
    {
30
        $message = $stack->handleIncoming(); // Proceed before logic
×
31
        if (!$message instanceof Close) {
×
32
            return $message;
×
33
        }
34
        if (!$connection->isWritable()) {
×
35
            // Remote sent Close/Ack: disconnect
36
            $this->logger->debug("[close-handler] Received 'close' ackowledge, disconnecting");
×
37
            $connection->disconnect();
×
38
        } else {
39
            // Remote sent Close; acknowledge and close for further reading
40
            $this->logger->debug("[close-handler] Received 'close', status: {$message->getCloseStatus()}");
×
41
            $ack =  "Close acknowledged: {$message->getCloseStatus()}";
×
42
            $connection->closeRead();
×
43
            $connection->pushMessage(new Close($message->getCloseStatus(), $ack));
×
44
        }
45
        return $message;
×
46
    }
47

48
    public function processOutgoing(ProcessStack $stack, Connection $connection, Message $message): Message
49
    {
50
        $message = $stack->handleOutgoing($message); // Proceed before logic
×
51
        if (!$message instanceof Close) {
×
52
            return $message;
×
53
        }
54
        if (!$connection->isReadable()) {
×
55
            // Local sent Close/Ack: disconnect
56
            $this->logger->debug("[close-handler] Sent 'close' ackowledge, disconnecting");
×
57
            $connection->disconnect();
×
58
        } else {
59
            // Local sent Close: close for further writing, expect remote ackowledge
60
            $this->logger->debug("[close-handler] Sent 'close', status: {$message->getCloseStatus()}");
×
61
            $connection->closeWrite();
×
62
        }
63
        return $message;
×
64
    }
65

66
    public function __toString(): string
67
    {
68
        return get_class($this);
×
69
    }
70
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc