wstalk 1.3.3

  • Readme
  • Changelog
  • Example
  • Installing
  • 52

WSTalk #

Library providing a natural interface to asynchronous network messaging by implementing a back-and-forth binary messaging protocol on top of WebSocket.

Message responses themselves can also be requests, which differs from plain RPC protocols, in that it allows back-and-forth trampolining between server and client without having to manually track conversation states. Additionally, requests can also be made for streams, which allows for efficient list queries to be easily implemented. Stream responses can recursively be requests in themselves, and so forth.

Usage #

import 'dart:io';
import 'package:wstalk/wstalk.dart';

runServer() async {
  HttpServer server = await HttpServer.bind('127.0.0.1', 9090);
  await for (HttpRequest request in server) {
    if (request.uri.path == '/ws') {
      // Upgrade to WSTalk socket
      WebSocket ws = await WebSocketTransformer.upgrade(request);
      TalkSocket ts = new TalkSocket(ws);
      // Register incoming message types
      ts.stream(42).listen((TalkMessage) {
        ts.close();
        server.close();
      });
      // Listen
      ts.listen();
    } else {
      // ...
    }
  }
  print("Server exited");
}

runClient() async {
  TalkSocket ts = await TalkSocket.connect("ws://localhost:9090/ws");
  testClient(ts);
  await ts.listen();
  print("Client exited");
}

testClient(TalkSocket ts) async {
  // Ping three times
  for (int i = 0; i < 3; ++i) {
    print(await ts.ping());
  }
  // Multi-ping three times
  for (int i = 0; i < 3; ++i) {
    // Receive four responses for each
    await for (int dt in ts.multiPing()) {
      print(dt);
    }
  }
  // Tell the server to close
  ts.sendMessage(42, new List<int>());
}

main() {
  runServer();
  runClient(); 
}

1.3.3 #

  • Can now request for streams. Stream responses can recursively be requests as well.

1.2.1 #

  • Request messages can be replied to with an exception using sendException.
  • Request message timeout can be extended through the sendExtend function.
  • Formatted source.
  • Fixed some minor issues.

0.9.3 #

  • Initial version.

example/wstalk_example.dart

import 'dart:io';
import 'package:wstalk/wstalk.dart';

runServer() async {
  try {
    HttpServer server = await HttpServer.bind('127.0.0.1', 9090);
    try {
      await for (HttpRequest request in server) {
        try {
          if (request.uri.path == '/ws') {
            WebSocket ws = await WebSocketTransformer.upgrade(request);
            TalkSocket ts = new TalkSocket(ws);
            ts.stream(42).listen((TalkMessage) {
              ts.close();
              server.close();
            });
            () async { try {
              await ts.listen();
            } catch (ex) {
              print("Server socket listen exception:");
              print(ex);
            } }();
          } else {
            // ...
          }
        } catch (ex) {
          print("Request handling exception:");
          print(ex);
        }
      }
    } catch (ex) {
      print("Server listen exception:");
      print(ex);
    }
  } catch (ex) {
    print("Server bind exception:");
    print(ex);
  }
  print("Server exited");
}

runClient() async {
  try {
    TalkSocket ts = await TalkSocket.connect("ws://localhost:9090/ws");
    try {
      testClient(ts);
    } catch (ex) {
      print("Client test exception (should not occur):");
      print(ex);
    }
    try {
      await ts.listen();
    } catch (ex) {
      print("Client listen exception:");
      print(ex);
    }
  } catch (ex) {
    print("Client connect exception:");
    print(ex);
  }
  print("Client exited");
}

testClient(TalkSocket ts) async {
  // Ping three times
  for (int i = 0; i < 3; ++i) {
    print(await ts.ping());
  }
  // Tell the server to close
  ts.sendMessage(42, new List<int>());
}

main() {
  runServer();
  runClient();
}

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  wstalk: ^1.3.3

2. Install it

You can install packages from the command line:

with pub:


$ pub get

with Flutter:


$ flutter pub get

Alternatively, your editor might support pub get or flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:wstalk/wstalk.dart';
  
Popularity:
Describes how popular the package is relative to other packages. [more]
31
Health:
Code health derived from static analysis. [more]
73
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
73
Overall:
Weighted score of the above. [more]
52
Learn more about scoring.

We analyzed this package on Dec 9, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.6.1
  • pana: 0.13.1+4

Health suggestions

Fix lib/src/wstalk_socket.dart. (-26.71 points)

Analysis of lib/src/wstalk_socket.dart reported 62 hints, including:

line 49 col 7: Unnecessary new keyword.

line 52 col 39: Unnecessary new keyword.

line 54 col 7: Unnecessary new keyword.

line 56 col 7: Unnecessary new keyword.

line 75 col 13: Unnecessary new keyword.

Format lib/src/wstalk_message.dart.

Run dartfmt to format lib/src/wstalk_message.dart.

Format lib/wstalk.dart.

Run dartfmt to format lib/wstalk.dart.

Maintenance suggestions

Package is getting outdated. (-27.40 points)

The package was last published 66 weeks ago.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.0.0-dev.58.0 <3.0.0
meta ^1.1.5 1.1.8
Dev dependencies
test ^1.0.0