522 Commits over 1,461 Days - 0.01cph!
More accurately synchronize Time.Now between clients. Fixes Facepunch/sbox-issues#6326 (at least with the repro they attached.)
Fixed Sync attribute / CodeGenerator wrapped properties ignoring existing modifiers (Fixes Facepunch/sbox-issues#5867)
Delta Snapshot Slots (#1660)
Only run logic in SceneNetworkSystem.OnBecameHost if scene is valid - we could just be in a lobby/party but not in-game
If GameObject isn't valid when trying to call an RPC, call the method anyway but only if we can determine that we have permission to do so - this way we can ensure RPC methods are still not called when they shouldn't be for any given user. (Fixes Facepunch/sbox-issues#6270)
Fixed an issue where if you're Small Fish and disconnect yourself from a created lobby immediately by calling GameNetworkSystem.Disconnect in OnLoad, a TCP socket would remain open preventing you from starting a lobby again. This is because Disconnect is called before the asynchronous method CreateLobbyAsync has finished, so it goes and adds/creates new sockets that never get closed.
Idea for custom writing / reading data to snapshot per component (if it overrides those methods)
Some docs
Explicit ISnapshotWriter interface
Read snapshot immediately - no need for this prop
Dispose ByteStream properly
Rename to INetworkSnapshot
Component.INetworkSnapshot - improve some docs
Fix deserializing across network when GameObject reference on a property doesn't exist on the receiving end
Better warning messages on unknown component / gameobject for RPC - try to log the RPC method name, and if unknown component the GameObject name
Don't need to use the RPC filter here this should fix Tony's issue - doing a check inside the RPC callback anyway
Fix parent setting, flush for appropriate game object only, ++
Add undo support / unsaved changes to advanced network settings
Clearer logic for these flags
Only log this message if networking debug is on
Re-enable Nagle by default, Protocol++
Component RPCs sent Id instead of type name string allowing RPCs from multiple components of the same type. Protocol++
Make sure we do include reliable transform update when changing ownership
Squashed commit of the following:
commit 76f039bef3ee819f4b5e0b34179223405196d5bd
Author: kurozael <kurozael@gmail.com>
Date: Tue Aug 6 15:50:41 2024 +0100
Cleanup
commit 7559957d809b94986d20f93f417f69194138782a
Author: kurozael <kurozael@gmail.com>
Date: Tue Aug 6 15:43:55 2024 +0100
Some logs
commit ed9cb58705a97c3889d8d7a4ef97d8895b93dc98
Author: kurozael <kurozael@gmail.com>
Date: Tue Aug 6 15:04:35 2024 +0100
Remove debug log
commit 91c006383091050f87ac0a75b70df02e9ac17498
Author: kurozael <kurozael@gmail.com>
Date: Tue Aug 6 14:54:41 2024 +0100
Remove debugging - fix spike when flushing pending updates
commit a681e665208d87bc99c82ffb9865abc24365caa5
Author: kurozael <kurozael@gmail.com>
Date: Tue Aug 6 14:43:32 2024 +0100
Fix flags
commit 5eee6683b66a3b38390605a1f7ba72aaf51cc68a
Author: kurozael <kurozael@gmail.com>
Date: Tue Aug 6 14:34:28 2024 +0100
More debug
commit f35802593b1e9af772bf91a3eb451cb6c1c6dc3a
Author: kurozael <kurozael@gmail.com>
Date: Tue Aug 6 14:30:52 2024 +0100
Debugging
commit 42e0e1d3d06f4cce830c530e7b2e3943b94921e4
Author: kurozael <kurozael@gmail.com>
Date: Tue Aug 6 12:52:35 2024 +0100
++
commit d2402c9253ef520bdea0b141a393d0baa72a8d82
Author: kurozael <kurozael@gmail.com>
Date: Tue Aug 6 12:46:25 2024 +0100
Initial commit
Actually log the result code from SendMessageToUser so can debug issues here
NetworkSpawnRemote after all NWOs from snapshot deserialized but before callback batch to ensure references exist ( Fixes Facepunch/sbox-issues#6086 )
Add global:: to generated code for attributes with CodeGenerator ( Fixes Facepunch/sbox-issues#6055 )
Branch for experimenting and fucking around with networking w/ diagnostics
Test trying to reduce packet sizes a lot
Only do parent rpc if we're network root
Change order here
Go back to reliable test
Test
Reduce initial size
Test unreliable again
Unreliable transform updates test
Prevent calling Msg_ClearInterpolation for ourselves
Fix
drop older updates
Fix
Remove this log
When flushing pending updates before RPC calls - send reliable transform update
Move net stats drawing out into system
Only flush pending updates on reliable RPCs
Some docs
Don't call set parent if we called the rpc
Call these flags Transmission maybe
Some refactor, try to branch out with convar where possible
Make internal for now
Remove net_experiment convar
Network protocol++
Send if unreliable anyway - should be acceptable it'll either drop or not
Make net_debug work in game
Remove queue system - make minimumState Snapshot instead of Connected for broadcastraw
Initial commit test
Make it not dumb
ToString override
Add name for debug
Output addr
Draw some of the info with gizmos - tho doesn't render in non-editor mode rn
Print network info cmd
net_info includes own connection
Make GetStats internal for now - could be useful public later
Use display name
Prefab instances must be updated to have at least the tags specified in their prefab (Fixes Facepunch/sbox-issues#5729)
Fixed not being able to edit these advanced networking settings in prefab editor - working around NetworkAccessor ref struct
Let's remove these exceptions - let us try to call RPCs on components that don't have a networked object root, as long as a GO and Component exists on the other end with those ids, we should allow it
Initial commit
Call flush here
Don't set to connected until Activate
Undo that
Flush for source here too
Only queue messages after Snapshot (otherwise ignore) and send when Connected. Add new docs to broadcast
By default queuedUntilState is null
Remove debug logs
Use new ByteStream( data ) instead of create w/ length then write
Optimization to remove queues when no longer required (cheers Ziks)
Remove BytePack.ISerializer from Connection for now - need to solve something first
BytePack.ISerializer implementation for Connection. Also make sure we clear Connection._mockConnections on ResetEnvironment because I think this dictionary would never clear otherwise. Remove long-time unused net_lerptime ConVar.
Byte Pack Convert - Networked GameObject, Component, GameResource References (#1618)
* Add add IBytePackConvert to a class to specify how it should be serialized/deserialized with BytePack (similar to IJsonConvert). Implement for GameObject.
* Add IBytePackConvert support to Component and GameResource
* We should be able to null these out
* Some comments on ConverterPacker to describe its use
* Let's move it out of Sandbox and call it BytePack.ISerializer - it won't be exposed to public API (for now?)
* Makes sense to rename to SerializerPacker so it matches ISerializer
* Explicit implementations of BytePackRead and BytePackWrite means we can have these non-public
* Add test for BytePack.ISerializer with MySerializedClass
* Some minor doc change
* Tidy
Only serialize NetworkMode, NetworkInterpolation, NetworkOrphaned and OwnerTransfer in GameObject.Serialize if they are not their default values
Fixed static Authority RPC checking permissions against the wrong attribute and messages should be sent to the host and not broadcast
Check index is >= 0 or <= Count when using ObservableCollection<T>.Insert in NetList - otherwise use Add instead
Inspector Advanced Network Settings (#1617)
* Start adding support to edit Network Orphaned and Owner Transfer options in Inspector (visible when Network Mode is set to Object) https://files.facepunch.com/conna/1b0311b1/sbox-dev_I7Fk7tfs6K.png
* Make sure NetworkOrphaned and OwnerTransfer modes get serialized / deserialized
* Move over to setting NetworkOrphaned/OwnerTransfer on the GameObject directly (with multi-select)
* Move out to its own widget - this is gonna be a button that drops down for advanced network settings
* Adv network settings button next to Network Mode in inspector - opens drop down menu to set net orphaned mode / owner transfer mode
* Store current val outside scope
* Modify style
* Add RadioSelect widget for use with advanced network settings as it makes sense ( https://files.facepunch.com/conna/1b0911b1/sbox-dev_Ej9Kk8WU3y.mp4 )
* Disable the option to open the menu if NetworkMode is not Object - no point allowing to change these settings for objects that arent networked
Ensure we properly network ownership changes during network orphaned actions
Keep project loading stuff together and make sure we load initial collision rules after project settings file system is mounted (Fixes Facepunch/sbox-issues#5739)
Closes Facepunch/sbox-issues#5566
Throw exception when sending RPC on non-networked Game Objects (Closes Facepunch/sbox-issues#5504)
Fixed potential NRE in AudioListener component when scene camera isn't valid (yet)
Fix overlapping Reset to Default on ControlSheet with Reset Transform context menu. Add individual reset Position/Scale/Rotation on Transform context menu (Fixes Facepunch/sbox-issues#4867)
Fix issue with new local instance on "local" package to do with small network files
Remove from interpolation system on GameObject destroy
Call TransformChanged() once again in InterpolateFixedUpdate
Clear pending updates in SceneNetworkUpdate too
Make sure we use TargetLocal in any transform changed callbacks called from within interpolation phase to fix physics bodies using wrong values. Add internal InterpolationWorld getter in GameTransform and use that in ModelRenderer OnTransformChanged for updating scene object position (fixes broken interp.)
PhysicsWorld.CollisionRules Refactor - Project Settings Small Network Files Support (#1604)
* Add PhysicsWorld.CollisionRules getter. Delete ServerConfig. Update collision rules json on world if hash changes before physics step. Project Settings (.config) are networked via Small Network Files - can react to changes
* Do GetHashCode this way
* Initialize CollisionRules
* Handle small network files from different file systems this way?
* Fix
* Fix documentation
* Reset config files
* Kind of genericize SmallNetworkFiles - push / add / remove files from it externally - mount its MemoryFileSystem externally as well to desired file system
* Fix - but obviously it can't be done this way it's absolutely awful
* Add all files from network when mounting on client side
* Method name update
* Remove some duplication
* Cleanup
* Fix inverted condition
* Unnecessary arg
* ToHashCode
* ReadWithFallback will return new T() if package is null too
* Store CollisionRules from Project Settings in ProjectSettings static class - update it when project settings change. Physics worlds using this reference should update automatically
* Call ProjectSettings.Reset in ResetEnvironment
* Clean up
* Swap these
When deserializing a GameObject create components in a try/catch and log an error if it fails. If no component could be created, add a missing component. Fixes not being able to open a prefab if there's an error in the constructor of a component. Closes Facepunch/sbox-issues#4397
Add Package.FileSize (MB) ( Closes Facepunch/sbox-issues#4908 )