I have no idea how to contact you guys so... I'll try it here.
Closed this issue · 11 comments
Is this project MySQL compatible?
How is the status of the project?
Is this project MySQL compatible?
How is the status of the project?
I dont think it wrok on mysql but psql is fine
I am trying build this wrok but only can access to character gui when select character and bursting
it stock,cant see any ship on it
This is as good a method as any, so to address your questions and share the status:
Is this project MySQL compatible?
In its current form, if you were to substitute a MySQL database instead of Postgres you'd get some driver errors. However I don't believe I've set up anything Postgres specific in the gorm config, so it's worth seeing if changing this line will get it to work with MySQL:
Line 15 in 776d8ee
How is the status of the project?
(Also Sancaros's question) Things generally work up to the point at which the character receives the lobby list (per #15). However there's an issue that I frequently run into during my testing that has been a blocker for making much more progress and I've not yet figured out how to resolve: #26. Feel free to take a look!
I definitely won't call this project dead but I've found it difficult to find enough time to sit down and make progress after my burst of activity ~6 months ago, which is why there haven't been any recent commits.
By the way apparently there's a Discussions feature now so I enabled that if it's easier.
Through my understanding of Teth's old code, I spent nearly a month to analyze it (I don't know much about C). In the login server, only packet expecting is 0x93 and 0x05, and after selecting the role, I will disconnect from the login server. Archon only has one server to deal with this problem. Will the client send the disconnection instruction and Archon accept it, This may be the reason why Archon no longer sends the ship list
Maybe you should separate multiple servers. After all, throughout all the server code, no server can be merged into one
@Sancaros it's a bit of a misnomer to say that Archon is a single server. It is indeed a single process but is composed of several independently operating server implementations, each running on their own set of threads. Every server has a main thread that is responsible for accepting client connections on distinct ports, which spins off a goroutine that will do all of the packet exchanging according to that server's logic. I don't believe separating the server processes would have any impact and would be a rather large architectural change.
In the case of the character server disconnect packet, the client is exchanging that packet over a connection to Archon's character server and the character.Server
logic is what's handling it.
@Sancaros it's a bit of a misnomer to say that Archon is a single server. It is indeed a single process but is composed of several independently operating server implementations, each running on their own set of threads. Every server has a main thread that is responsible for accepting client connections on distinct ports, which spins off a goroutine that will do all of the packet exchanging according to that server's logic. I don't believe separating the server processes would have any impact and would be a rather large architectural change.
In the case of the character server disconnect packet, the client is exchanging that packet over a connection to Archon's character server and the
character.Server
logic is what's handling it.
void ShipSend0D(unsigned char command, BANANA* client, ORANGE* ship)
{
ship->encryptbuf[0x00] = 0x0D;
switch (command)
{
case 0x00:
// Requesting ship list.
ship->encryptbuf[0x01] = 0x00;
(int)&ship->encryptbuf[0x02] = client->plySockfd;
compressShipPacket(ship, &ship->encryptbuf[0x00], 6);
break;
default:
printf("The client did not find the ship list, disconnect from the client.\n"); //12.25
client->todc = 1; //12.25
break;
}
}
thats the code from teth server
The server I've built so far will crash the client if it selected the character and then enters the transport. I think if there are too many packets sent in the characterserver to be received by the client
At teth server code I've tried loading extra data during the Character Entry List phase to crash the client as well.
So I don't think that the Ship code you posted is relevant to Archon's d/c issue as it's occurring during the third phase of the Character server connection (well before the ship list is sent). I've gotten a bunch of packet logs from Archon and compared them to the ones from custom version of Tethealla and Archon is sending a functionally identical set of packets back to the client over the course of the session.
However I don't remember whether or not I explicitly compared the total size of the character data between the two servers. Is your theory that Archon is just sending a malformed set of character data but it doesn't crash the client until later?
I am based on the conclusion of my edited Teth code, perhaps from this angle, this is a conjecture.
It's worth a look, I'll try find some time this weekend to diff the character data and see if anything turns up
Progress is more or less resuming and I fixed a couple of bugs that were slowing things down. Feel free to open another issue/discussion for questions but I'm going to go ahead and close this out.