diff --git a/src/org/hwo/io/servicelink/AsynchronServiceLinkProvider.java b/src/org/hwo/io/servicelink/AsynchronServiceLinkProvider.java new file mode 100644 index 0000000..8522e57 --- /dev/null +++ b/src/org/hwo/io/servicelink/AsynchronServiceLinkProvider.java @@ -0,0 +1,40 @@ +package org.hwo.io.servicelink; + +import java.util.Hashtable; +import java.util.LinkedList; +import java.util.List; + +public class AsynchronServiceLinkProvider { + + ServiceRegisterCache cache; + Hashtable> serviceRegisterListeners; + + public AsynchronServiceLinkProvider(ServiceRegisterCache cache){ + this.cache = cache; + } + + private Integer calcRegisterHash(int ax,int node,int registerno){ + Integer hash = (ax << 24) | (node << 16) | registerno; + return hash; + } + + private List getListeners(Integer hash){ + if (!serviceRegisterListeners.containsKey(hash)) + serviceRegisterListeners.put(hash, new LinkedList()); + + return serviceRegisterListeners.get(hash); + } + + public void addServiceRegisterListener(int ax,int node,int registerno,ServiceRegisterListener listener){ + getListeners(calcRegisterHash(ax, node, registerno)).add(listener); + } + public void removeServiceRegisterListener(int ax,int node,int registerno,ServiceRegisterListener listener){ + getListeners(calcRegisterHash(ax, node, registerno)).remove(listener); + } + + public void update(){ + /* TODO: Implementieren des Update Zyklus */ + } + + +} diff --git a/src/org/hwo/io/servicelink/ServiceRegisterListener.java b/src/org/hwo/io/servicelink/ServiceRegisterListener.java new file mode 100644 index 0000000..0d8d146 --- /dev/null +++ b/src/org/hwo/io/servicelink/ServiceRegisterListener.java @@ -0,0 +1,8 @@ +package org.hwo.io.servicelink; + +public interface ServiceRegisterListener { + + void ServiceRegisterValueUpdated(int ax,int node,int registervalue,Integer value); + void ServiceRegisterValueUpdated(int ax,int node,int registervalue,Float value); + +}