Commit Graph

103 Commits

Author SHA1 Message Date
Ingvar Stepanyan a1edcd7bc2 Try to use HashSet with compatable DbValue 2024-06-18 10:55:26 +01:00
Ingvar Stepanyan ce14ff7a77 Create primaryKeyChanges only for transaction update 2024-06-18 02:33:49 +01:00
Ingvar Stepanyan d7d706632a Make _preProcessedNetworkMessages non-blocking 2024-06-18 01:50:57 +01:00
Ingvar Stepanyan 8621769f7f Use ReadOnlyMemory and Span for opts 2024-06-18 01:18:46 +01:00
Ingvar Stepanyan 214538b383 Various opts 2024-06-18 00:32:06 +01:00
Ingvar Stepanyan 1bf56cd3cf bitcraftbench wip 2024-06-18 00:18:10 +01:00
Ingvar Stepanyan 7e8a6ed876 Update test snapshots 2024-06-17 21:05:18 +01:00
Ingvar Stepanyan 27120e8242 Move Verify converters around 2024-06-17 11:50:42 +01:00
Ingvar Stepanyan 9c01734a1e Simplify Identity scrubbing 2024-06-17 11:48:04 +01:00
Ingvar Stepanyan e345452304 Fix formatting 2024-06-15 23:43:06 +01:00
Ingvar Stepanyan 21e475b1cc Add Stats snapshot 2024-06-15 23:40:38 +01:00
Ingvar Stepanyan 17ce57ffe1 Store test dump in a maintainable format 2024-06-15 23:24:15 +01:00
Ingvar Stepanyan 40f6138c4c Update API docs 2024-06-15 22:08:20 +01:00
Ingvar Stepanyan 0267f02332 Add snapshot-based tests 2024-06-15 22:04:50 +01:00
Ingvar Stepanyan b648b9ca88 Autoformat & verify on CI 2024-06-15 16:45:43 +01:00
Zeke Foppa 53d6f9c3ed Release v0.10.0 (#98)
## Description of Changes

Changes for release 0.10.

---------

Co-authored-by: Zeke Foppa <github.com/bfops>
Co-authored-by: Ingvar Stepanyan <me@rreverser.com>
2024-06-13 22:51:31 +01:00
Ingvar Stepanyan 7bafc7f1c7 Switch to shared BSATN support (#97)
## Description of Changes

See https://github.com/clockworklabs/SpacetimeDB/pull/1312 for the main
description and API breakages.

In the process extracted and simplified various common bits from
generated code into the SDK itself to make generated code more concise.

 - Closes #67.
 - Closes #68.
 - Closes #73.
 - Closes #76.

## API

 - [x] This is an API breaking change to the SDK

*If the API is breaking, please state below what will break*


## Requires SpacetimeDB PRs

https://github.com/clockworklabs/SpacetimeDB/pull/1312
2024-06-07 20:22:59 +01:00
Zeke Foppa 92f5a17ba7 Bump version to 0.9.2 (#95)
## Description of Changes
Just bumps the version number. Since 0.9.1 has been released, we are now
on 0.9.2+!

## 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*

Co-authored-by: Zeke Foppa <github.com/bfops>
2024-05-28 15:48:11 -04:00
Ingvar Stepanyan 4819292d74 Simplify update handling as per consistent filtering proposal (#93)
## Description of Changes

As a result of the consistent filtering rules proposal
(clockworklabs/SpacetimeDB#1256), all equatable types are now natively
equatable in C# as well.

This allows us to compare objects directly, without holding and
comparing AlgebraicValue in the entries map as well, which has a bit of
a domino effect and allows to optimise, simplify or even remove some
parts of the SDK.

## API

 - [x] This is an API breaking change to the SDK

New filtering rules limit types on which filtering can be done, as well
as change the return type of `FilterBy` functions to always be iterable.

## Requires SpacetimeDB PRs

https://github.com/clockworklabs/SpacetimeDB/pull/1277
2024-05-28 15:23:20 +01:00
Ingvar Stepanyan ed6a3aac38 Ignore duplicate inserts in the same subscription update (#92)
## Description of Changes

Ignore duplicate inserts in the same subscription update

## 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*
2024-05-27 12:49:44 -05:00
Kurtis Mullins 1af72339f0 Bump version for release v0.9 (#94)
## 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*
2024-05-22 17:49:34 +01:00
Ingvar Stepanyan 125c5e7bc2 NFC: inline insert/delete update handling (#86)
## 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*
2024-05-14 12:48:52 +01:00
Ingvar Stepanyan 6ba3da5466 Minor refactoring of AuthToken (#84)
## 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*
2024-05-14 12:45:22 +01:00
Ingvar Stepanyan 8db08a7354 Switch to TaskCompletionSource (#89)
## 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*
2024-05-13 17:07:28 +01:00
Ingvar Stepanyan c8319ebb98 Simplify event dispatch in WebSocket (#90)
## 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*
2024-05-13 17:05:43 +01:00
Ingvar Stepanyan 8ca04842c5 Add basic CI (#88) 2024-05-13 16:49:57 +01:00
Ingvar Stepanyan c925af1791 Fix conflict resolution shenanigans (#87) 2024-05-13 16:45:56 +01:00
Ingvar Stepanyan 1bb67c59a9 Remove RowUpdate event (#83)
We talked about this for a while, so decided to do this in a separate PR.
2024-05-10 22:41:23 +01:00
Ingvar Stepanyan ce38cd100b NFC: remove unused primaryKeyValue field (#85)
This field is only used in self-assignment, so can be safely removed.
2024-05-09 19:18:18 -04:00
Ingvar Stepanyan 6b5b23d5b8 Extract common logic from OnMessageProcessComplete (#81)
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.
2024-05-09 15:47:14 +01:00
Ingvar Stepanyan eaa8fa0894 Merge ByteArrayComparers (#78)
* 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
2024-05-08 10:03:18 -04:00
Ingvar Stepanyan 2fd9eb48ea Fix nullability warnings in WebSocket class (#82)
There is a bunch of nullability issues in the project; this PR fixes just the ones in WebSocket + some drive-by fixups and/or syntax simplifications.
2024-04-25 15:43:04 +01:00
Ingvar Stepanyan 383ba27324 Make logger a separate SDK setting from client instance (#79)
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.
2024-04-24 17:51:53 +01:00
Ingvar Stepanyan f6aa76c733 Set language version to 9 (#80)
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.
2024-04-24 15:34:17 +01:00
Ingvar Stepanyan 0ca2a5453d Nit: remove unused inserts field (#77) 2024-04-23 13:10:18 +01:00
Ingvar Stepanyan e649c49e80 Add Brotli decompression (#75)
C# client counterpart for https://github.com/clockworklabs/SpacetimeDB/pull/1026.
2024-03-29 11:45:52 -04:00
Phoebe Goldman 75dc6b59b0 Remove the rowPk from the client API (#72)
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.
2024-02-28 13:56:38 -05:00
John Detter 061f1c3fbf Added new callback - onBeforeSubscriptionApplied (#71)
* onBeforeSubscriptionApplied

* Small bug fix

---------

Co-authored-by: John Detter <no-reply@boppygames.gg>
2024-02-06 14:09:54 -06:00
John Detter b1705390f3 Fixed an issue where only one network packet was being processed per (#70)
frame

Co-authored-by: John Detter <no-reply@boppygames.gg>
2024-02-06 12:50:05 -06:00
John Detter d54c31a47c Upgraded version to 0.8.0 (#66)
Co-authored-by: John Detter <no-reply@boppygames.gg>
2023-12-21 09:17:38 -06:00
John Detter f3159602b2 Workflow for Publishing Nuget Package (#64)
* 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>
2023-12-21 09:16:32 -06:00
John Detter 9c744a3d26 v0.7.2-beta Changes (#62)
* 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>
2023-12-21 06:08:41 -06:00
John Detter 819947c3c4 Small updates to 0.7.0 (#61)
Co-authored-by: John Detter <no-reply@boppygames.gg>
2023-10-14 03:30:38 -05:00
John Detter b2dbe89c91 Small 0.7.0 Fixes (#60)
* Small update

* Small fix

---------

Co-authored-by: John Detter <no-reply@boppygames.gg>
2023-10-12 12:23:50 -05:00
John Detter 102061f5fd Release v0.7.0-beta (#56)
* One-off query support (#49)

* SpacetimeDBURI argument in place of host and ssl enabled bool (#52)

* SpacetimeDBURI argument in place of host and ssl enabled bool

* Small cleanup

---------

Co-authored-by: John Detter <no-reply@boppygames.gg>

* Add support for client address; re-run `spacetime generate` for quickstart client (#54)

* README.md and License.txt updates (#53)

* Update README.md

* Add license.txt

* Rename

* Add LICENSE.txt with proper case

---------

Co-authored-by: Derek Brinkmann <dbrinkmann@clockworklabs.io>

* Add support for client address; re-run `spacetime generate` for quickstart client

Re: https://github.com/clockworklabs/SpacetimeDB/pull/299

---------

Co-authored-by: dbrinkmanncw <109690865+dbrinkmanncw@users.noreply.github.com>
Co-authored-by: Derek Brinkmann <dbrinkmann@clockworklabs.io>

* Making Quickstart Work Again (#57)

* Packaged nuget package, quickstart is now working again

* Reset DBNAME

---------

Co-authored-by: John Detter <no-reply@boppygames.gg>

* OnUnhandledReducerError (#31)

Co-authored-by: Steve <steve@codefics.com>
Co-authored-by: Boppy <no-reply@boppygames.gg>

---------

Co-authored-by: james gilles <jameshgilles@gmail.com>
Co-authored-by: dbrinkmanncw <109690865+dbrinkmanncw@users.noreply.github.com>
Co-authored-by: John Detter <no-reply@boppygames.gg>
Co-authored-by: Phoebe Goldman <phoebe@goldman-tribe.org>
Co-authored-by: Derek Brinkmann <dbrinkmann@clockworklabs.io>
Co-authored-by: SteveBoytsun <100594800+SteveBoytsun@users.noreply.github.com>
Co-authored-by: Steve <steve@codefics.com>
2023-10-12 11:54:57 -05:00
dbrinkmanncw b08a03eb55 README.md and License.txt updates (#53)
* Update README.md

* Add license.txt

* Rename

* Add LICENSE.txt with proper case

---------

Co-authored-by: Derek Brinkmann <dbrinkmann@clockworklabs.io>
2023-10-12 08:28:02 -05:00
dbrinkmanncw 1003db20f8 Commit quickstart example (#44)
* Commit quickstart example

* GetHashCode fix for Identity.cs

* Remove SDK from quickstart project and add nuget package. Rename spacetime_types folder to module_bindings

---------

Co-authored-by: Derek Brinkmann <dbrinkmann@citadelstudios.net>
2023-08-08 13:50:00 -04:00
dbrinkmanncw e0524fa4eb Update version to 0.6.0 (#48)
* Update version to 0.6.0

* Change PackageId to match other packages

---------

Co-authored-by: Derek Brinkmann <dbrinkmann@citadelstudios.net>
2023-08-02 10:15:37 -04:00
Alessandro Asoni 1a95b387db Performance improvement for Del/Ins -> Update conversion (#47)
* 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>
2023-08-02 10:31:11 +02:00
John Detter c7dbe3540c Created PR Template (#38)
* Added PR Template

* Changed headers a bit

---------

Co-authored-by: Boppy <no-reply@boppygames.gg>
2023-08-01 21:43:09 -05:00