- When Participant A was closed by remote side. Then a `disconnect` on `A`
shall return Ok() (instead of ParticipantDisconected) IF:
A was already flushed and no data needs to be sended any more.
so a `disconnect` doesnt differ if the other side initiated the disconnect before or not. it tries to clean things up and returns Ok(()) if both sides agree
- It was possible for a end_receiver to be triggered in the moment while a frame was started by not finished.
This removed bytes from the stream with them getting lost. this almost ever was followed by a RAW frame as the TCP stream was now invalid.
The TCP stream was then detected by participant or caused one or multiple failures
- introduces some simplifications, removed a macro, reuse code
- replace RwLock by Mutex if it's only accessed for insert/delete
- use RwLock<HashMap<Mutex>> pattern otherwise in order to allow concurrent `.read()`
- fixed a deadlock O.o
Fix Cave NPCs only spawning very deep inside caves
Increase twig density
Adjust armour values and ingredients for starter sword
fix healing rod using the wrong model
Hung up the lianas again
first bunch of comments addressed
change order or scatter, paths and caves being applied in worldgen to avoid floating scatter objects
campfire adjustments, reduced grass density due to FPS issues
readded item descriptions to the crafting window, item desc for craftable armour
address comments
happy clippy, happy life
clippy
clippy
more clippy
fmt
revert cargo.toml formatting
remove "allow unreachable pattern"
fmt
velorite staff update
ore_nature_longbow
model fix
humanoid colours
Update agent.rs
improve rng (according to zesterer)
slower fleeing
More adjustments
fix cult leader name
more loot tables
all kinds of adjustments
smöl adjustments
fix talking animals
fix critter exp, stronger villagers
biped large balancing
more villager balancing, mushroom spawning rate
more balancing
fix rebase
multiple loottables
Add tarasque and bonerattler armour
Added loot tables for different groups of weapons and armor based off relative strength. Added loot table for cultist boss.
Added loot tables for consumables and food. Trimmed down default loot table.
remove male and female sign from char creation
chest loot tables
fix loot tables
lootable crates
lantern keybinding display
more loot tables
loot table changes
fixed loot tables
fix typo
more grass
rebase fix, better lantern
re-add sprite rotation for grass
crafting window alignment fix, new streetlamps, new shopsigns, new healing staff
height change
more specific stats
Update body.rs
more balancing
non hostile catoblepas and mouflons
quad low
more adjustments
Animals with enemy alignment now deal correct damage. Made health scaling species-specific.
Till now, we just dropped the TCP connection and registered this as a clean shutdown.
The prodocol reader intereted this and send a Frame::Shutdown frame to it's local processor.
This is ofc wrong.
So now the protocol reader will detect a Frame::Shutdown frame and send it over. if the Tcp connection gets closed it will return an Error up.
The processor will then pick up this error and request a unclear shutdown and notifies the user.
Also when doing a clean shutdown we are sending a Frame::Shutdown now to the remote side to trigger this behavior.
Before we wrongly added the feature of only using a `select` in channel. This is WRONG,
as it could mean that the write maybe fails, but the read still had some Frames buffered which then get dropped.
Its fixed now by the clean shutdown mechanims defined before.
Also when a channel is closed now inside a participant we are closing the whole participant as a protection.
However, we must not close the recv channel as the `handle_frames_mgr` might still be working on them, so we only stop writing/sending.
Debugging this also let me introduce some smaller fixes:
- PID in tests are now 0 and 1+1*64+1*64*64+... this makes the traces appear as AAAAAA and BBBBBB instead of ABAAAA and ACAAAA
- veloren client now better seperates between clean shutdown and unclear shutdown.
- added a new type: C2pFrame for `(cid, Result<Frame, ()>)`
- wrong frames inside the handshare are not counted in metrics
-
added a span for disconnecting on the gameserver side. also added more debug! tracing there
Just keeping a trace! all 10000ms active to have a keep alive feeling.
Participant will now handle a close in the `create_channel_mgr` rather then the `send` fn. Its the better place, which makes a HashMap better for delete lookup
Since tcp_read now broke but tcp_write didn't and the Participant wasnt updated till both were broke, we changed CHANNEL tcp_read and tcp_write in protocols to be a `select` rather than a `join`
However only do this in the CHANNEL, but in the HANDSHAKE. it fails if you try to. Also the handshake will take care of any failed read or write manually and will handle a clear teardown in this case.