## Description of Changes
Bumped the version number to 0.9.0 as this was forgotten in the previous
release. Includes all changes to date.
## API
- [X] This is an API breaking change to the SDK
*If the API is breaking, please state below what will break*
Not sure but its going out with the latest release. The previous package
was 5 months ago.
## Requires SpacetimeDB PRs
*List any PRs here that are required for this SDK change to work*
## Description of Changes
Instead of a separate TableOp enum, and 4 fields to handle insert/delete
metadata in DbOp, use a nullable struct that contains non-nullable
object + bytes pair internally:
- if `insert` is present (non-nullable) and `delete` is nullable, that
naturally indicates insert operation
- if `insert` is nullable and `delete` is not, that's a delete
- if both are non-nullable, it's an update
- if both are null, it's an internal "no change" state
This simplifies and shortens update handling as well as reduces risk of
state getting out of sync - e.g. TableOp saying that the operation is
insert should exist but field containing inserted value being null. Now
nullable struct itself communicates whether there is an insert or not,
without a separate enum.
## API
- [ ] This is an API breaking change to the SDK
*If the API is breaking, please state below what will break*
## Requires SpacetimeDB PRs
*List any PRs here that are required for this SDK change to work*
## Description of Changes
Initially just fixed the nullability issues / warnings, but in the
process did a few more minor drive-by refactorings.
## API
- [ ] This is an API breaking change to the SDK
*If the API is breaking, please state below what will break*
## Requires SpacetimeDB PRs
*List any PRs here that are required for this SDK change to work*
## Description of Changes
There is only one place where we use Channels, and it's to create and await a channel with one element - which is functionally the same as a more precise and low-weight TaskCompletionSource.
Switching also makes the SDK compatible with the widely supported .NET Standard 2.1 subset, which is supported natively in Unity and allows to remove a custom System.Threading.Channels package from Unity SDK dependencies.
## API
- [ ] This is an API breaking change to the SDK
*If the API is breaking, please state below what will break*
## Requires SpacetimeDB PRs
*List any PRs here that are required for this SDK change to work*
## Description of Changes
Instead of using custom class hierarchy of messages, we can just use
native C# lambdas stored as Actions.
OnConnectError case can be further simplified by merging two branches
for different exception types into one.
## API
- [ ] This is an API breaking change to the SDK
*If the API is breaking, please state below what will break*
## Requires SpacetimeDB PRs
*List any PRs here that are required for this SDK change to work*
Minor refactoring that extracts common part of subscription and transaction update handling into a separate function, so that the main logic in `OnMessageProcessComplete` is a bit more straightforward and handles all event types with a sinlge `switch` instead of 3 separate `switch`es.
This is a small no-op step that makes further refactoring and optimisation of said common logic a bit easier.
* Merge ByteArrayComparers
Merge various mismatched implementation of byte array comparison/hashing into a single utils class (choosing the most efficient implementation already present).
* Forward hex conversion too
* Use const for Identity & Address sizes
This allows to:
1. Have a preset logger that is already correctly matching the environment (console vs Unity).
2. Removes the need for explicit `SpacetimeDBClient.CreateInstance(...)` which is particularly awkward to use and easy to forget with singleton as it doesn't return a result as a factory method name could suggest. Instead, `SpacetimeDBClient.instance` is available on first use.
3. Slightly simplifies dependencies between classes, e.g. `ClientCache` doesn't need a circular dependency on `SpacetimeDBClient`, making future maintenance and changes a bit easier.
This is the last C# version supported by Unity.
While this PR doesn't require almost any C# code changes, I found that limiting the version is helpful for ensuring that I don't accidentally introduce Unity-incompatible code in larger PRs.
Re: https://github.com/clockworklabs/SpacetimeDB/pull/840
This commit updates the C# SDK to no longer use the `row_pk` field
of the Protobuf client API,
as that field has been removed. (Will have been removed, as of merging.)
Where a table cache was previously keyed on `byte[] rowPk`,
it is now keyed on `byte[] rowBytes`,
where `rowBytes` is the BSATN-encoded bytes of the row.
This means we effectively store two copies of each row in the client cache:
the BSATN serialized format, and the decoded domain type.
An alternate implementation would be to make the table caches be sets of domain types,
discarding the BSATN bytes.
We find this undesirable for several reasons:
- Hashing and equality-comparing `byte[]` is almost certainly more efficient
than doing the same for domain types.
- Even if hashing and equality-comparing domain types were efficient,
we would still have to update codegen to emit hashing and equality methods
for all types in the module_bindings.
This implementation requires no changes to the module_bindings.
- We already have the BSATN bytes sitting around,
as they're necessarily part of the message we recieve from the server.
This change does no additional serialization or deserialization.
In essence, we're trading memory for time and simplicity.
Keeping the BSATN bytes live approximately doubles the table cache's memory usage,
but simplifies the implementation greatly,
and (we suspect) speeds up table cache insertions, deletions and lookups.
* Committing script for building nuget package
* Script replaced with github action workflow
* On pull requests as well
* Bump version
* Updated build config
* Ready to test
---------
Co-authored-by: John Detter <no-reply@boppygames.gg>
* Changes merged in from v0.7.1-beta
* Small bug fix from stream
* Updated logo file
* Small bug fix related to OnBeforeDelete callback
* Upgraded version to 0.7.2
---------
Co-authored-by: John Detter <no-reply@boppygames.gg>
* generate types to SpacetimeDB.Types namespace
* Fix the way we look for Reducer class
* Fix using Identity as Primary Key
* Performance improvement for Del/Ins -> Update conversion
* Fix
* work
* fixes
* Remove accidental commit
* Fix indentation
---------
Co-authored-by: Derek Brinkmann <dbrinkmann@citadelstudios.net>
* generate types to SpacetimeDB.Types namespace
* Fix the way we look for Reducer class
---------
Co-authored-by: Derek Brinkmann <dbrinkmann@citadelstudios.net>
* Add optional component to handle saving auth token to local storage. By default it saves to your user dir
* Fixes for naming collisions
---------
Co-authored-by: Derek Brinkmann <dbrinkmann@citadelstudios.net>
* Fix close not stopping message thread
Add error message to onConnectError
Add more context to "NotAWebSocket" error
* Remove unnecesary while loop
* Clear isclosing flag on Connect
---------
Co-authored-by: Derek Brinkmann <dbrinkmann@citadelstudios.net>
* Deserializing reducer args before table updates so they can be accessed from callbacks
* Reducer arguments in table events
* Adding OnBeforeDelete event to tables
---------
Co-authored-by: Steve <steve@codefics.com>
Co-authored-by: John Detter <4099508+jdetter@users.noreply.github.com>
* Deserializing reducer args before table updates so they can be accessed from callbacks
* Reducer arguments in table events
* Adding OnBeforeDelete event to tables
* Renaming ReducerCallInfo to ReducerEvent
* Removed extra onSubscriptionUpdate
---------
Co-authored-by: Steve <steve@codefics.com>
Co-authored-by: John Detter <4099508+jdetter@users.noreply.github.com>
* Deserializing reducer args before table updates so they can be accessed from callbacks
* Reducer arguments in table events
* Removed redundant onSubscriptionUpdate
---------
Co-authored-by: Steve <steve@codefics.com>
Co-authored-by: John Detter <4099508+jdetter@users.noreply.github.com>
Co-authored-by: John Detter <no-reply@boppygames.gg>