Regalis
96c425414c
Server and EntityEventManager debug logging can be enabled in release builds by enabling verbose logging, DebugConsole.ThrowError logs stacktraces
2017-06-03 19:01:39 +03:00
Regalis
9adb3fd8fa
Disabled a leftover entityevent debug message
2017-06-01 19:52:02 +03:00
Regalis
87788b449e
Disabled EntityEvent debug messages from release builds
2017-05-30 19:47:29 +03:00
Regalis
e3b595b9e0
Cleanup (removing unused variables & other redundancies, rethrowing exceptions instead of wrapping them in a new exception instance)
2017-05-20 15:35:13 +03:00
Regalis
152a92e600
Server removes events if no clients are playing. Otherwise the server would keep creating new events indefinitely and midround-joining clients would instantly get kicked out because they're missing very old events.
...
+ fixed server not sending midroung sync messages if the list of new (non-unique) events is empty
2017-05-05 00:14:30 +03:00
Regalis
d1c633385b
Unique event IDs start from 1 (otherwise the server/clients will think event #0 has been already received)
2017-05-02 22:21:58 +03:00
Regalis
d0b52d92fe
Event ID wraparound fixes
2017-05-02 22:18:36 +03:00
Regalis
06db2fed86
Fixed clients incrementing their lastReceivedID every time they receive an empty entity event (even if the event has already been received)
2017-05-02 22:15:18 +03:00
Regalis
90f354f6d7
Clients notify the server when they "give in" (i.e. kill their character when unconscious)
2017-04-26 23:39:41 +03:00
Regalis
e94a50a29a
The server keeps track of which ID a client is going to switch to when midround syncing is done, and switches the ID immediately when the client is in sync (instead of waiting for the client to report the new ID).
...
Fixes clients occasionally getting kicked out the moment they're in sync, because their latest received ID is still set to the ID of the last unique event and the server thinks they're requesting some old event that doesn't necessarily exist anymore.
+ added a debug command that creates a ton of entity events
2017-04-08 20:10:15 +03:00
Regalis
9330bd08de
Clients don't switch from init events to normal until they receive the first normal event update (instead of switching when they receive the last init event they know about). Otherwise the client may switch to normal events too early, if the server has created new unique events the client doesn't know about yet.
2017-04-06 21:52:24 +03:00
juanjp600
4ad373294c
Update client.UnreceivedEntityEventCount on every event write
...
I noticed that if the main event IDs went over 10000 and there were more than 450 unique events, the server would sometimes skip the next event the client needed. Sometimes the client would also not realize that the last event it received was the final init event, so it would reject all further events because of a huge ID discrepancy. The init events will likely need to be reworked, but updating UnreceivedEntityEventCount seems to help somewhat.
2017-04-06 12:37:38 -03:00
Regalis
3306a1ab96
EntitySpawner only writes a limited number of entities per packet
2017-03-26 17:19:29 +03:00
Regalis
dfd24045f8
EntityEventManagers send an empty event if the entity doesn't exist anymore when writing the message (may happen, for example, when a client is still waiting for some message about the item when it's destroyed in a deconstructor).
...
Not sending the events at all would be a better solution, but then we'd need to shift the IDs of all the consecutive events and make sure it doesn't mess anything up with any of the clients. Not necessarily worth the effort, considering how rare these "empty events" are.
2017-03-24 19:12:09 +02:00
Regalis
d4db37f8dd
CPR syncing + some refactoring
...
Clients send an entityevent to the server when they start/stop doing CPR, and server includes the animation state in messages when character is dragging some other character
2017-03-22 20:05:50 +02:00
Regalis
8d8620047d
Fixed clients who leave a server and re-join becoming desynced and not being kicked by the server.
...
The clients didn't reset their ChatMessage.LastID, which caused an exception to be thrown when clamping the chatmsg ID server-side, preventing the server from updating the lastRecvEntityEventID of the client later in the method. The server wouldn't kick the client, because ServerEntityEventManager wouldn't handle cases where a client is waiting for an event that doesn't exist anymore.
2017-03-14 22:43:15 +02:00
Regalis
8c659e2a08
Server checks if midround syncing is needed when a client is in the game (i.e. loaded the sub, etc), not when the client requests the start message. Some clients take longer to start the round than others, and they may miss unique messages even if they were in the lobby when the round started.
...
Clients also get extra 10 seconds to receive newly created events after the midround syncing is done
2017-03-13 21:50:01 +02:00
Regalis
9e3d51edf4
ServerEntityEventManager doesn't prevent creating a duplicate event if the previous one has already been sent to someone, handling exceptions in WriteEvent
2017-03-11 15:39:11 +02:00
Regalis
c851770386
Fixed "trying to read past the buffer size" errors caused by item updates sent by clients, midround syncing timeout period is calculated based on the number of events the client needs to receive
2017-03-11 12:49:08 +02:00
Regalis
6a31d56175
Fixed mid-round joining clients automatically getting kicked out because they're missing old events
...
Now they're kicked out if they're not in sync within 10 seconds of joining, TODO: calculate a reasonable timeout based on the amount of events and/or give the client more time if they keep receiving events
2017-03-09 21:40:58 +02:00
Regalis
c956e7aa7f
Fixed one missed UInt32 -> Uint16 conversion in ServerEntityEventManager
2017-03-09 21:35:02 +02:00
juanjp600
11b7903d4a
Fixed some ServerEntityEventManager ID comparisons
...
I'm probably still missing some comparisons.
2017-03-06 16:31:51 -03:00
juanjp600
29d06bbfc8
Fix build errors
2017-03-06 16:26:52 -03:00
juanjp600
ecb7500df9
Converted UInt32 ID's to UInt16
...
TODO: test everything, make sure nothing broke
2017-03-06 16:25:12 -03:00
juanjp600
7935ecce46
- fixed crash in UpdateVoteStatus
...
- fixed clients reconnecting automatically after being kicked for desync
2017-03-01 17:04:51 -03:00
juanjp600
983ab9c05b
Fixed potential null exception
2017-03-01 16:42:12 -03:00
juanjp600
e681a2d29a
Clients that are waiting for very old events are kicked
2017-03-01 16:40:07 -03:00
Regalis
502211c6a7
Resetting entity event IDs (lastSentToAll & client-specific IDs) when a round ends
2017-02-20 20:26:12 +02:00
Regalis
6c8f5b8999
The server maintains a list of unique EntityEvents created during the round and sends them to clients who join mid-round
2017-02-18 15:09:13 +02:00
Regalis
0e66f2a69c
Fixed exceptions in ServerEntityEventManager if there are no clients on the server, clients who are in the lobby can't prevent outdated EntityEvents from being removed
2017-02-18 13:18:48 +02:00
juanjp600
c46856167c
Stopped server events that hadn't been sent to everyone from being removed
2017-02-16 20:34:29 -03:00
juanjp600
ae67be1775
Removing "sent" duplicates when a new event is added
2017-02-15 13:48:13 -03:00
Regalis
52bf73722f
ServerEntityEventManager doesn't process received events until the character inputs of the client for the corresponding frame have been processed (fixes character movement lagging behind EntityEvents at the servers side)
...
+ split character networking logic into a separate file, characters drop items at the position of their collider instead of hands
2017-02-09 23:09:42 +02:00
Regalis
4589c2bcfb
Syncing changes to ingame editable item properties (light colors etc)
2017-01-27 18:28:07 +02:00
Regalis
8f50cca026
Syncing StatusEffects applied by meleeweapons or using an item on self
2017-01-15 14:49:15 +02:00
Regalis
f7ac98ab5f
Broken items can be repaired, fixed clients never removing firesources (causing the lights to stay after the flames have been extinguished)
2017-01-14 20:30:46 +02:00
Regalis
bd7766d3e7
Server clears EntityEventManager before starting a new round, not just when ending it (fixes events breaking during the next round if an item created an event when unloading the previous sub) + some additional error checks
2017-01-14 20:26:41 +02:00
Regalis
9b03b2bcc1
Server ignores UPDATE_INGAME messages if the game isn't running, server doesn't set any of the clients' lastRecvIDs above the ID of the latest chatMsg/event/etc (clients can't have received something the server hasn't sent yet)
2017-01-13 18:07:00 +02:00
Regalis
b9006983e4
Item condition syncing
2017-01-11 18:01:07 +02:00
Regalis
3041138f03
Inventory.TryPutItem doesn't put an item in the inventory (or create a NetEntityEvent) if the item is already in it
2017-01-10 20:50:31 +02:00
Regalis
ff96f152ce
Resetting EntityEvent & EntitySpawner IDs when starting a new round, LOS effect is enabled when a client takes control of a character
2017-01-09 18:22:37 +02:00
Regalis
1eea373117
NetEntityEvent fixes:
...
- comparing event data equality with Object.Equals instead of == because == returns false for boxed value types
- fixed old unacked messages not being resent if there are newer unacked messages that have been resent less than 1.5 * RTT ago
2017-01-03 20:10:03 +02:00
Regalis
c318e629ff
Health, bleeding, oxygen & stun syncing, sending aim and use inputs and cursor positions to clients so other players will be able to see when someone is shooting, hitting with a wrench etc
2017-01-02 22:12:50 +02:00
Regalis
020aac55ea
AICharacter position syncing
2016-12-29 22:01:50 +02:00
Regalis
3411448ae8
Submarine position syncing improvements
2016-12-10 19:53:35 +02:00
Regalis
1f454d593e
Inventory syncing, objHeader is passed to the ClientRead/ServerRead methods so they can determine how to read the msg (is it an inventory update, position, input, etc)
2016-12-10 16:39:58 +02:00
Regalis
9192dad6ea
EntityEventManagers wait for 1.5*roundtriptime before resending messages (less unnecessary resends), skipping to the next event in a packet if an exception is thrown while reading an event
2016-12-09 20:00:41 +02:00
Regalis
bea523187b
The host can send chat messages, fixed client not being passed to ServerRead methods
2016-12-09 16:45:08 +02:00
Regalis
e4744e8385
Resetting EventManager IDs when ending the round, NaN/INF check when setting camera position
2016-11-24 20:48:20 +02:00
Regalis
0c9a55e9e0
- server doesn't create a new EntityEvent if there's a duplicate event waiting to be sent
...
- hull, radar, steering & pump syncing
2016-11-14 16:58:21 +02:00