HerculesWS / Hercules

Hercules is a collaborative software development project revolving around the creation of a robust massively multiplayer online role playing game (MMORPG) server package. Written in C, the program is very versatile and provides NPCs, warps and modifications. The project is jointly managed by a group of volunteers located around the world as well as a tremendous community providing QA and support. Hercules is a continuation of the original Athena project.
http://herc.ws
GNU General Public License v3.0
894 stars 754 forks source link

Fix server sync reading and wrong disconnection from API Server #3304

Closed guilherme-gm closed 2 months ago

guilherme-gm commented 3 months ago

Pull Request Prelude

Changes Proposed

This fixes how packet 0x272D (CharServer -> LoginServer online accounts sync) is read by Login Server. Thus, preventing accounts from being wrongly marked as offline.

When login-server marks an account as offline, it will eventually tell API Server to disconnect them, thus also invalidating users' API Tokens while they are in game.

Huge thanks to AcidMarco in Herc's discord that provided a quite good explanation of what he has observed and this helped me a lot in finding the root cause (or at least I think it did...)

Issues addressed: None, I think.

dastgirp commented 3 months ago

Probably unrelated to this PR, but there's one more issue wherein API server is called for autotraders on restart, and we get bunch of Account not online errors

guilherme-gm commented 2 months ago

Probably unrelated to this PR, but there's one more issue wherein API server is called for autotraders on restart, and we get bunch of Account not online errors

Yeah, I think this is a separate issue. I will take a look into it and open a new PR if I find something (maybe we should create an issue about it?)

vBrenth commented 1 month ago

Hello, I applied this on my server and it fixes some of recent problem but after few hours of server being online the character-login gets disconnected.

I don't know how it happen or reproduce its just gets disconnected. Then i had to restart the Login and Character server to be able to login again.

image

@dastgirp , @guilherme-gm any updates?

guilherme-gm commented 1 month ago

@vBrenth can you try using the first commit only? this one: https://github.com/HerculesWS/Hercules/pull/3304/commits/29d858c70589fdb8a3279d930103a43b8cc7d6c7

I am wondering if I may have made a mistake when converting to struct.

vBrenth commented 1 month ago

@guilherme-gm I've been running the first commit only and its still having some saving problem but less and no disconnection between char and login so far.

guilherme-gm commented 1 month ago

@guilherme-gm I've been running the first commit only and its still having some saving problem but less and no disconnection between char and login so far.

Thanks for the update, I made a fix on #3312 so the 2nd commit properly works.

Are the saving problems giving any logs? is there any reproduction steps for it? I think we need to figure out whether this is a server issue or a client one, since I noticed that there are some cases where the client doesn't send the changes to be saved

vBrenth commented 1 month ago

I cant find a way to reproduce it. Its just happen after some time with players are online.