anchor.diff:    get_sign_ids_for_kiosk_id
   }
   
  +void notify(List<SendPort> subs, int signId) {
  +  // tell any subscribers about the update
  +  var badPorts = List<SendPort>();
  +  if (subs != null) {
  +    for (var port in subs) {
  +      var reply = GetSignIdResponse();
  +      reply.signId = signId;
  +      try {
  +        port.send(reply);
  +      } catch (e) {
  +        badPorts.add(port);
  +      }
  +    }
  +    for (var badPort in badPorts) {
  +      subs.remove(badPort);
  +    }
  +  }
  +}
  +
   // Manage all service data in an in-memory data store.
   // Runs in a separate thread.
   void manage(SendPort listener) async {
  
positive.code:         var kioskIds = data[0];
          var signId = data[1];
          if (kioskIds.isEmpty) {
            for (var kioskID = 1; kioskID < nextKioskId; kioskID++) {
              signIdsForKioskIds[kioskID] = signId;
            }
          } else {
            for (var kioskId in kioskIds) {
              signIdsForKioskIds[kioskId] = signId;
            }
          }
          print('$signIdsForKioskIds');
          // reply with the Empty() message
          replyTo.send(Empty());
          break;
        case Command.get_sign_id_for_kiosk_id:
          var reply = GetSignIdResponse();
  		var signId = signIdsForKioskIds[data.kioskId];
          if (signId != null) {
  			reply.signId = signId;		
  		}
          replyTo.send(reply);
          break;
        case Command.get_sign_ids_for_kiosk_id:
          break;
        default:
          replyTo.send(data);
  
negative.code:     dataManagerSendPort
          .send([Command.get_sign_ids_for_kiosk_id, request, response.sendPort]);
      await for (var value in response) {
        yield value;
      }
  	print('lost connection');
    }
  }
  
  