Open endel opened 3 years ago
Hi @endel, I also got this error, but i am using javascript instead of typescript on the server side. Can u give a javascript example? Thanks a lot.
Hi @sorrow31812, for plain JavaScript it is a bit complicated, the general suggestion is to always use TypeScript:
// javascript
const schema = require("@colyseus/schema");
// create a new context
const context = new schema.Context();
class MyState extends schema.Schema {
}
schema.defineTypes(MyState, {
currentTurn: "string"
}, context); // use the context
Make sure you use the specified context
for every structure your state depends on, otherwise the "schema mismatch" is going to happen
I get it, thanks for your help! 👍
Another known appearance of the "schema-mismatch" problem was just found by @drburton when duplicating a field name through inheritance. Just documenting this here, as a fix is coming soon!
How to reproduce
class Entity extends Schema {
@type("string") id: string;
@type("string") ownerId: string;
@type("number") xPos: number = 0;
@type("number") yPos: number = 0;
@type("number") zPos: number = 0;
}
class Player extends Entity {
@type("string") id: string; // duplicate "id" from Entity - "schema-mismatch" is going to happen!
@type("boolean") connected: boolean;
}
EDIT: since @colyseus/schema@1.0.20
the above definition is going to throw an error pointing out where the duplicate definition is located at. (https://github.com/colyseus/schema/commit/a8b86e998c1df3c32a470fdd27d4e2e3c7cffcbd)
hello dear friends i have this error only in android build of unity (apk), in editor when i running game every thing is ok
This error is reported often, and one of its causes is when multiple room/state classes are defined in the server with the same schema "context".
Internally, every
@type()
call is going to register the property in a "global" context:To avoid registering every schema in the global context, you can create a different context like this:
Actions needed: