Client/Server compatibility between SVN and releases
Connections between the (now) incompatible SVN and 0.4.4 client/server is still permitted. There is no way to distinguish between the servers (if the admin doesn't say SVN in the hostname) until you get kicked. For new users, this would be confusing and possibly lead them to the conclusion that the odamex is too buggy to even be played.
Proposed solution: From what I understand, the connection compatibility is solely based on the protocol version, so a define could be made that affects how this version is found. Say it has three states:
Release: This will be defined in tagged releases. release clients can connect to release servers.
Compatible: This will be set between releases as long as compatibility is maintained with release builds both ways. Protocol number will be identical to release builds.
Incompatible: This is between releases when (if) compatibility is broken with the release client/server. Protocol number will be one higher than the release version.
What do you guys think?
The Odamex launcher now displays server versions. Is this good enough?
I would say it is not sufficient as-is. We need to either distinguish more clearly what's considered newer or older than the current release, or simply not show servers that are older than latest stable and distinguish those that are newer.
Yeah, it should definitely not allow clients to connect to incompatible servers, but if a certain release, let's say 0.5.2, maintains protocol compatibility with 0.5.1, then connections should be allowed. More or less, the protocol number should be independent of the actual version number. (I don't think it is at the moment, correct me if I'm wrong)
ZDaemon keeps the old protocol in the clients, as far as I know, which allows for demo compatibility with old releases as well as allows server admins to be a bit lazy with the updates. ;)
Incompatibility is deeper than just protocol or what messages are supported. Versioning should perhaps reflect this?
For a long time this was fixed, however with the git conversion it is broken again. We need a solution. Alex suggested having a read-only cvar that has the version number in it.
We basically accomplish this currently through the Master git branch and protobreak. The system seems to work fine for us.