GitHub Documentation Patreon donate button

Uncaught TypeError: Cannot read property '_schema' of undefined



  • Hi,

    I'm having trouble using Schema for my state. If I comment the setState line it works.

    Here's what I got:

    import { Room, Client } from 'colyseus';
    import { type, Schema } from '@colyseus/schema';
    
    import { BattleState } from './BattleState';
    import { MessageType } from '../utils';
    
    export class BattleRoom extends Room {
        @type('number') maxClients = 2;
    
        onInit(options: any) {
            this.setState(new BattleState());
        }
    
        onJoin(client: Client, options: any) {
            console.log('onJoin', options);
            
            if (this.clients.length === 2) {
                this.lock();
            }
        }
    
        onLeave(client: Client, consented: boolean) {
            console.log('onLeave', consented);
        }
    
        onMessage(client: Client, message: any) {
            console.log('onMessage', message);
        }
    
        onDispose() {
            console.log('onDispose');
        }
    }
    
    import { MapSchema, Schema, type } from '@colyseus/schema';
    
    import { BattleTeam } from '../entities/BattleTeam';
    
    export class BattleState extends Schema {
        @type('uint8') round = 0;
        @type('string') status = 'READY';
        @type('uint8') moves = 0;
        @type('uint8') teamCount = 0;
        @type({ map: BattleTeam }) teams = new MapSchema<BattleTeam>();
    }
    
    import { Schema, type } from '@colyseus/schema';
    
    import { BattleTeamData } from '../utils';
    
    export class BattleTeam extends Schema {
        @type('uint8') move: number;
    
        constructor(teamData: BattleTeamData) {
            super();
    
            this.move = 0;
    
            console.log('---- BattleTeam ----');
            console.log(this.toJSON());
        }
    }
    
    interface BattleTeamData {
        move: number;
    }
    

  • administrator

    hi @hlarcher, welcome!

    will I be able to reproduce just with the code you provided? I don't see you mutating much on the State for this error to happen. I'd appreciate if you can provide a simple client + server on GitHub so I can inspect this problem further.

    This error (TypeError: Cannot read property '_schema' of undefined) indeed does happen sometimes, and it's quite difficult to track down. It usually happens when the encoder is not doing its job properly (or doing it in a not so intuitive way)



  • You're right, its not easy to test from what I've shown, I just assumed I was doing something obviously wrong that you would pickup off the bat.

    I'll setup a repo with it, at the moment its split into 2 different ones and has a lot of unnecessary code.

    Thanks again, I'll let you know when its done.



  • @endel while putting together the repo I managed to get it working because I linked to the client script in https://raw.githack.com/colyseus/colyseus.js/master/dist/colyseus.js instead of the local one I had, maybe it was just a bug in the old version I was running.


 

GitHub Documentation Patreon donate button

© 2019 Endel Dreyer