Skip to content

Commit fac010d

Browse files
authored
Merge pull request #8 from Goddchen/feature/pointer-events
feat: support pointer events (WIP)
2 parents d057160 + 0d3281a commit fac010d

10 files changed

+868
-4
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,8 @@
1313
## 0.2.0
1414

1515
- Add support for protocol versions 3.3 and 3.7
16+
17+
## 0.3.0
18+
19+
- Add support for pointer events
20+
- Properly use the `logging` package

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ And here we are, after a weekend, with the first, minimal, protocol implementati
5252
- ⬜ SetEncodings
5353
- ✅ FramebufferUpdateRequest
5454
- ⬜ KeyEvent
55-
- PointerEvent
55+
- PointerEvent
5656
- ⬜ ClientCutText
5757
- Server-to-Client
5858
- ✅ FramebufferUpdate
@@ -64,7 +64,7 @@ And here we are, after a weekend, with the first, minimal, protocol implementati
6464

6565
As simple as `dart pub add dart_rfb`.
6666

67-
Or manually add `dart_rfb: ^0.2.0` to your `pubspec.yaml`.
67+
Or manually add `dart_rfb: ^0.3.0` to your `pubspec.yaml`.
6868

6969
## Usage
7070

lib/dart_rfb.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ library dart_rfb;
22

33
export 'src/client/config.dart';
44
export 'src/client/remote_frame_buffer_client.dart';
5+
export 'src/client/remote_frame_buffer_client_pointer_event.dart';
56
export 'src/client/remote_frame_buffer_client_update.dart';
67
export 'src/protocol/client_init_message.dart';
78
export 'src/protocol/encoding_type.dart';

lib/src/client/remote_frame_buffer_client.dart

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ import 'dart:typed_data';
55

66
import 'package:dart_des/dart_des.dart';
77
import 'package:dart_rfb/src/client/config.dart';
8+
import 'package:dart_rfb/src/client/remote_frame_buffer_client_pointer_event.dart';
89
import 'package:dart_rfb/src/client/remote_frame_buffer_client_update.dart';
910
import 'package:dart_rfb/src/constants.dart';
1011
import 'package:dart_rfb/src/extensions/byte_data_extensions.dart';
1112
import 'package:dart_rfb/src/extensions/int_extensions.dart';
1213
import 'package:dart_rfb/src/protocol/client_init_message.dart';
1314
import 'package:dart_rfb/src/protocol/frame_buffer_update_message.dart';
1415
import 'package:dart_rfb/src/protocol/frame_buffer_update_request_message.dart';
16+
import 'package:dart_rfb/src/protocol/pointer_event_message.dart';
1517
import 'package:dart_rfb/src/protocol/protocol_version_handshake_message.dart';
1618
import 'package:dart_rfb/src/protocol/security_handshake_message.dart';
1719
import 'package:dart_rfb/src/protocol/security_result_handshake_message.dart';
@@ -139,6 +141,30 @@ class RemoteFrameBufferClient {
139141
),
140142
);
141143

144+
void sendPointerEvent({
145+
required final RemoteFrameBufferClientPointerEvent pointerEvent,
146+
}) =>
147+
_socket.match(
148+
() {},
149+
(final RawSocket socket) {
150+
final RemoteFrameBufferPointerEventMessage message =
151+
RemoteFrameBufferPointerEventMessage(
152+
button1Down: pointerEvent.button1Down,
153+
button2Down: pointerEvent.button2Down,
154+
button3Down: pointerEvent.button3Down,
155+
button4Down: pointerEvent.button4Down,
156+
button5Down: pointerEvent.button5Down,
157+
button6Down: pointerEvent.button6Down,
158+
button7Down: pointerEvent.button7Down,
159+
button8Down: pointerEvent.button8Down,
160+
x: pointerEvent.x,
161+
y: pointerEvent.y,
162+
);
163+
_logger.info('> $message');
164+
socket.write(message.toBytes().asUint8List());
165+
},
166+
);
167+
142168
/// Start the reading loop that handles incoming protocol messages.
143169
Future<void> startReadLoop() async => await _socket.match(
144170
() => throw Exception('Socket not available'),
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import 'package:freezed_annotation/freezed_annotation.dart';
2+
3+
part 'remote_frame_buffer_client_pointer_event.freezed.dart';
4+
5+
@freezed
6+
class RemoteFrameBufferClientPointerEvent
7+
with _$RemoteFrameBufferClientPointerEvent {
8+
const factory RemoteFrameBufferClientPointerEvent({
9+
required final bool button1Down,
10+
required final bool button2Down,
11+
required final bool button3Down,
12+
required final bool button4Down,
13+
required final bool button5Down,
14+
required final bool button6Down,
15+
required final bool button7Down,
16+
required final bool button8Down,
17+
required final int x,
18+
required final int y,
19+
}) = _RemoteFrameBufferClientPointerEvent;
20+
}

0 commit comments

Comments
 (0)