cirras / eo-protocol Goto Github PK
View Code? Open in Web Editor NEWAn XML-based specification of the Endless Online network protocol and data files
License: MIT License
An XML-based specification of the Endless Online network protocol and data files
License: MIT License
Mostly a brain dump of things I found weird
welcome_code
not welcome_reply
(all other reply packets use the x_reply
naming
spell
vs skill
(should stick with skill I think)
item
vs buy_item
sell_item
drop_item
etc (think we should keep it simple and just use item
)
base
and secondary
vs base_stats
and secondary_status
NpcType::Trainer
should be SkillMaster
?
victim
vs target
(victim doesn't really make sense for heal spells
level_up
should be level_up_stats
in npc packets
ChestReply server packet could use Item
rather than item_id
and remaining_item_amount
Will add more later probably. Ignore until I let you know it's complete :P
eo-protocol
specification is code generation for libraries.eo-protocol
still receives changes to fix inaccuracies or inconsistencies.How are libraries supposed to conform to semantic versioning while also managing changes to eo-protocol
?
eo-protocol
spec change may surface as a breaking change for the library's API. In other words, deprecation of the old API is not possible and the library will require a major version bump.How are libraries supposed to "remember" the eo-protocol
changes so that deprecations can be generated?
eolib-python
does this by hardcoding deprecations into the code generator. (see Cirras/eolib-python@c03eda6)eolib-python
approach is inconsistent and error-prone, with no centralized source of truth.Meaningful changes should be tracked in a changes.xml
file which libraries can consume and make decisions based on.
Each change type element should be a direct child of the root <changes>
element.
structs | packets | fields | enums | enum values | miscellaneous |
---|---|---|---|---|---|
add-struct |
add-packet |
add-field |
add-enum |
add-enum-value |
other |
remove-struct |
remove-packet |
remove-field |
remove-enum |
remove-enum-value |
- |
rename-struct |
- | rename-field |
rename-enum |
rename-enum-value |
- |
- | - | retype-field |
retype-enum |
- | - |
Each change type element should have the following attributes:
when
(date when the change was made, with format YYYY-MM-DD
)reason
(message describing the reason for the change)changes.xml
A changeset-start-date
should be specified by each target and not be changed unless the major version is bumped.
A particular target's code generator should...
changes.xml
changeset-start-date
rename-field
change, then deprecated field accessors should be generated with the old nameWhat constitutes a breaking change is target-specific and won't be specified by changes.xml
.
For example, renaming a type would always be a breaking change in eolib-java
.
However, any language with type aliases could simply create a (deprecated) type alias from the old name to the new name.
Therefore, a particular target's code generator should decide whether a change is breaking.
If a change in the selected changeset (from changeset-start-date
onward) is considered breaking...
changeset-start-date
to today, and bump the library's major version."changes.xml
example<changes>
<rename-field when="2023-12-29" reason="`Direction` violates the naming convention for fields.">
<old-name>Direction</old-name>
<new-name>direction</new-name>
<type>
<packet family="Walk" action="Player" kind="client"/>
</type>
</rename-field>
</changes>
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.