code: @Override
      protected boolean reSubscribe(EventChannelStruct channelStruct, EventCallBackStruct eventCallBackStruct) {
          //  ToDo
          boolean done = false;
          try {
              ApiUtil.printTrace("====================================================\n" +
                                  "   Try to resubscribe " + eventCallBackStruct.channel_name);
              DevVarLongStringArray   lsa =
                  ZMQutils.getEventSubscriptionInfoFromAdmDevice(
                          channelStruct.adm_device_proxy,
                          eventCallBackStruct.device.name(),
                          eventCallBackStruct.attr_name, eventCallBackStruct.event_name);
  
              //  Update the heartbeat time
              String  admDeviceName = channelStruct.adm_device_proxy.name();  //.toLowerCase();
              //  Since Tango 8.1, heartbeat is sent in lower case.
              if (channelStruct.getTangoRelease()>=810)
                  admDeviceName = admDeviceName.toLowerCase();
              push_structured_event_heartbeat(admDeviceName);
              channelStruct.heartbeat_skipped = false;
              channelStruct.last_subscribed = System.currentTimeMillis();
              channelStruct.setTangoRelease(lsa.lvalue[0]);
              channelStruct.setIdlVersion(lsa.lvalue[1]);
              eventCallBackStruct.last_subscribed = channelStruct.last_subscribed;
              done = true;
          }
          catch(DevFailed e) {
              /* */
          }
          return done;
      }
docs: ===============================================================