iipRequestAttachResource method

void iipRequestAttachResource(
  1. int callback,
  2. int resourceId
)

Implementation

void iipRequestAttachResource(int callback, int resourceId) {
  Warehouse.getById(resourceId).then((r) {
    if (r != null) {
      if (r.instance
              ?.applicable(_session as Session, ActionType.Attach, null) ==
          Ruling.Denied) {
        _sendError(ErrorType.Management, callback, 6);
        return;
      }

      _unsubscribe(r);

      var link = DC.stringToBytes(r.instance?.link ?? "");

      if (r is DistributedResource) {
        // reply ok
        _sendReply(IIPPacketAction.AttachResource, callback)
          ..addGuid(r.instance?.template.classId as Guid)
          ..addUint64(r.instance?.age as int)
          ..addUint16(link.length)
          ..addDC(link)
          //..addDC(Codec.composePropertyValueArray(
          //    r.internal_serialize(), this, true))
          ..addDC(Codec.compose(
              (r as DistributedResource).internal_serialize(), this))
          ..done();
      } else {
        // reply ok
        _sendReply(IIPPacketAction.AttachResource, callback)
          ..addGuid((r.instance as Instance).template.classId)
          ..addUint64((r.instance as Instance).age)
          ..addUint16(link.length)
          ..addDC(link)
          ..addDC(Codec.compose((r.instance as Instance).serialize(), this))
          ..done();
      }

      _subscribe(r);
      //r.instance.children.on("add", _children_OnAdd);
      //r.instance.children.on("removed", _children_OnRemoved);
      //r.instance.attributes.on("modified", _attributes_OnModified);
    } else {
      // reply failed
      //SendParams(0x80, r.instance.id, r.instance.Age, r.instance.serialize(false, this));
      _sendError(ErrorType.Management, callback,
          ExceptionCode.ResourceNotFound.index);
    }
  });
}