flutter3d_hub 1.0.0-rc.1 copy "flutter3d_hub: ^1.0.0-rc.1" to clipboard
flutter3d_hub: ^1.0.0-rc.1 copied to clipboard

The model hub's client contract for flutter3d: the reference format `<uuid>@<n>`, the refusals, the cache policy and the versioned server protocol. Plain Dart with no engine behind it.

flutter3d_hub #

The client contract of the flutter3d model hub, models.pleion.dev: what a reference to a model is, why the hub refuses one, how a fetched model may be cached, and what a client and a server say to each other.

import 'package:flutter3d_hub/flutter3d_hub.dart';

final chair = HubReference.parse('0f8b5c2e-7a41-4d3b-9c6e-2a1f8e4d7b90@3');
final pinned = HubReference.parse(
  '0f8b5c2e-7a41-4d3b-9c6e-2a1f8e4d7b90@3'
  '#sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
);

The reference format #

<uuid>@<n>, optionally followed by #sha256=<64 lowercase hex digits>. The UUID names the model, the number its version on the hub, and the checksum, when present, is checked against the bytes. A version on the hub is immutable, so a reference names one file for good.

The format is fixed for good: references are written into code and levels and stay there for years. HubReference.parse is the one function that reads it, and it refuses anything else with a sentence that says what is wrong. test/fixtures/references.json lists the texts it accepts and the texts it refuses.

Refusals #

HubRefusedException carries a HubRefusal: notFound, withdrawn, hashMismatch, offline, tooLarge or protocol. The set is open, so a switch over it ends with a wildcard.

The protocol #

Every request carries the protocol version the client speaks (HubProtocol.version, 1.0), and every answer the version the server speaks. A client reads every minor of its own major and refuses another major with HubRefusal.protocol. Within a major the protocol only grows. The exchanges and their JSON Schemas are HubProtocol.endpoints, and api/flutter3d_hub.hub snapshots them, so a change to what a server answers is a version decision the structure rules check.

What this release does not do #

There is no network code here yet. The client that downloads a model, checks its hash and keeps an on-device cache keyed by it arrives as an addition on these types. In the engine, HubAssetSource (in flutter3d_core) names a hub model as an asset source today and refuses to read it with HubRefusal.offline until then.

Hub references are for examples and prototypes. An app in production vendors its models.

0
likes
140
points
55
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

The model hub's client contract for flutter3d: the reference format `<uuid>@<n>`, the refusals, the cache policy and the versioned server protocol. Plain Dart with no engine behind it.

Topics

#game-development #game-engine #graphics

License

MIT (license)

Dependencies

flutter3d_foundation

More

Packages that depend on flutter3d_hub