diff --git a/META6.json b/META6.json index a938977..f249d3f 100644 --- a/META6.json +++ b/META6.json @@ -12,7 +12,8 @@ "Digest::SHA1::Native", "Crypt::Random", "JSON::Fast", - "OO::Monitors" + "OO::Monitors", + "Log::Timeline" ], "provides": { "Cro::HTTP::Router::WebSocket": "lib/Cro/HTTP/Router/WebSocket.pm6", @@ -25,6 +26,7 @@ "Cro::WebSocket::FrameSerializer": "lib/Cro/WebSocket/FrameSerializer.pm6", "Cro::WebSocket::Handler": "lib/Cro/WebSocket/Handler.pm6", "Cro::WebSocket::Internal": "lib/Cro/WebSocket/Internal.pm6", + "Cro::WebSocket::LogTimelineSchema": "lib/Cro/WebSocket/LogTimelineSchema.pm6", "Cro::WebSocket::Message": "lib/Cro/WebSocket/Message.pm6", "Cro::WebSocket::Message::Opcode": "lib/Cro/WebSocket/Message/Opcode.pm6", "Cro::WebSocket::MessageParser": "lib/Cro/WebSocket/MessageParser.pm6", diff --git a/lib/Cro/WebSocket/Client.pm6 b/lib/Cro/WebSocket/Client.pm6 index 60cf54c..304534b 100644 --- a/lib/Cro/WebSocket/Client.pm6 +++ b/lib/Cro/WebSocket/Client.pm6 @@ -7,6 +7,7 @@ use Cro::WebSocket::BodySerializers; use Cro::WebSocket::Client::Connection; use Crypt::Random; use Digest::SHA1::Native; +use Cro::WebSocket::LogTimelineSchema; class X::Cro::WebSocket::Client::CannotUpgrade is Exception { has $.reason; @@ -102,6 +103,7 @@ class Cro::WebSocket::Client { # No extensions for now # die unless $resp.header('Sec-WebSocket-Extensions') eq Nil; # die unless $resp.header('Sec-WebSocket-Protocol') eq 'echo-protocol'; # XXX + Cro::WebSocket::LogTimelineSchema::Connected.log(); Cro::WebSocket::Client::Connection.new( in => $resp.body-byte-stream, :$out, |(%(:$!body-parsers, :$!body-serializers) with self) diff --git a/lib/Cro/WebSocket/Client/Connection.pm6 b/lib/Cro/WebSocket/Client/Connection.pm6 index 78f1b3f..a729233 100644 --- a/lib/Cro/WebSocket/Client/Connection.pm6 +++ b/lib/Cro/WebSocket/Client/Connection.pm6 @@ -6,6 +6,7 @@ use Cro::WebSocket::Internal; use Cro::WebSocket::Message; use Cro::WebSocket::MessageParser; use Cro::WebSocket::MessageSerializer; +use Cro::WebSocket::LogTimelineSchema; use OO::Monitors; class X::Cro::WebSocket::Client::Closed is Exception { @@ -123,7 +124,9 @@ class Cro::WebSocket::Client::Connection { multi method send(Cro::WebSocket::Message $m --> Nil) { self!ensure-open('send'); my $serialized = $m.serialization-outcome //= Promise.new; - $!sender.emit($m); + Cro::WebSocket::LogTimelineSchema::Sent.log: -> { + $!sender.emit($m); + } await $serialized; } multi method send($m) { diff --git a/lib/Cro/WebSocket/FrameSerializer.pm6 b/lib/Cro/WebSocket/FrameSerializer.pm6 index d8cb358..99902fa 100644 --- a/lib/Cro/WebSocket/FrameSerializer.pm6 +++ b/lib/Cro/WebSocket/FrameSerializer.pm6 @@ -19,7 +19,6 @@ class Cro::WebSocket::FrameSerializer does Cro::Transform { # Mask flag and payload length my $payload-len = $frame.payload.elems; - my $pos; if $payload-len < 126 { $message[1] = ($!mask ?? 128 !! 0) + $payload-len; } diff --git a/lib/Cro/WebSocket/Handler.pm6 b/lib/Cro/WebSocket/Handler.pm6 index f1ce57e..bc1ff08 100644 --- a/lib/Cro/WebSocket/Handler.pm6 +++ b/lib/Cro/WebSocket/Handler.pm6 @@ -1,5 +1,6 @@ use Cro::Transform; use Cro::WebSocket::Message; +use Cro::WebSocket::LogTimelineSchema; class Cro::WebSocket::Handler does Cro::Transform { has &.block; @@ -65,7 +66,9 @@ class Cro::WebSocket::Handler does Cro::Transform { whenever $block-result { when Cro::WebSocket::Message { - emit $_; + Cro::WebSocket::LogTimelineSchema::Sent.log: -> { + emit $_ + } if .opcode == Cro::WebSocket::Message::Close { $supplier.emit(CloseMessage); $end = True; @@ -73,7 +76,9 @@ class Cro::WebSocket::Handler does Cro::Transform { } } default { - emit Cro::WebSocket::Message.new($_) + Cro::WebSocket::LogTimelineSchema::Sent.log: -> { + emit Cro::WebSocket::Message.new($_) + } } LAST { diff --git a/lib/Cro/WebSocket/LogTimelineSchema.pm6 b/lib/Cro/WebSocket/LogTimelineSchema.pm6 new file mode 100644 index 0000000..bba7184 --- /dev/null +++ b/lib/Cro/WebSocket/LogTimelineSchema.pm6 @@ -0,0 +1,10 @@ +unit module Cro::WebSocket::LogTimelineSchema; + +use Log::Timeline; + +class Connected does Log::Timeline::Event['Cro::WebSocket', 'Client', 'Connected'] is export { } + +class Sent does Log::Timeline::Task['Cro::WebSocket', 'Message', 'Sent'] is export { } + +class Received does Log::Timeline::Task['Cro::WebSocket', 'Message', 'Received'] is export { } +