GitHub Documentation

Listen to state not getting proper data [Unity Client]

  • My state is like this:


    this.maxClients = 5;
    this.minClients = 3;
      players: {},
      apid: [],
      dpid: [1, 2, 3, 4, 5],

    onJoin(client, options) {

    var id;
    id = this.state.dpid.shift();
    this.state.players[client.sessionId] = {
      playerId: id,
      cards: [],
      state: 1,
      pack: 0,
      trickData: {
        Rank: 0,
        Sum: 0,
        c1: 0,
        c2: 0,
        c3: 0

    C# code for listen to state change is:

    room.Listen("players/:id", OnPlayerChange);
    //room.Listen("players/:id/:playerId", OnPlayerIdChange);
    //room.Listen("players/:id/:pack", OnPlayerPack);
    room.Listen("players/:id/:cards/:number", OnCardsChange);

    Problem is when palyersId change the OnPlayerIdChange and OnPlayerPack both getting the this data of state

      trickData: {
        Rank: 0,
        Sum: 0,
        c1: 0,
        c2: 0,
        c3: 0

    i want to listen to only playerId and pack when this variable changes

  • administrator

    Hi @hardik_sl! When you specify a segment starting with :attrName in the listeners, it will actually match any attribute, and assign the attribute name in the change.path.attrName variable.

    To listen for a particular value, you can specify it directly, without starting with :. Example:

    room.Listen("players/:id/playerId", OnPlayerIdChange);
    room.Listen("players/:id/pack", OnPlayerPack);

    BTW, I see you have an array of cards there. I wouldn't recommend mutating arrays in the room's state, unless you use them as a stack - and just push and pop on them. It's very tricky to keep the client state correct when removing or inserting values in-between the array.

    Hope this helps! Cheers!

  • @endel thank you. and i am just using cards array for push and pop only i am not mutating and thanks again for help.


© 2021 Lucid Sight, Inc