From 881e8ed446eecb17259327378207be01a3e877cf Mon Sep 17 00:00:00 2001
From: xujingfeng <jingfeng.xjf@alibaba-inc.com>
Date: Wed, 8 May 2019 17:49:54 +0800
Subject: [PATCH] add spi

---
 .../aliware/tianchi/CallbackListenerImpl.java | 15 ++++++
 ...apache.dubbo.rpc.listener.CallbackListener |  1 +
 .../aliware/tianchi/CallbackServiceImpl.java  | 48 +++++++++++++++++++
 ...g.apache.dubbo.rpc.service.CallbackService |  1 +
 4 files changed, 65 insertions(+)
 create mode 100644 workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java
 create mode 100644 workspace-gateway/src/main/resources/META-INF/services/org.apache.dubbo.rpc.listener.CallbackListener
 create mode 100644 workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java
 create mode 100644 workspace-provider/src/main/resources/META-INF/services/org.apache.dubbo.rpc.service.CallbackService

diff --git a/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java b/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java
new file mode 100644
index 0000000..9997263
--- /dev/null
+++ b/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java
@@ -0,0 +1,15 @@
+package com.aliware.tianchi;
+
+import org.apache.dubbo.rpc.listener.CallbackListener;
+
+/**
+ * @author daofeng.xjf
+ */
+public class CallbackListenerImpl implements CallbackListener {
+
+    @Override
+    public void receiveServerMsg(String msg) {
+        System.out.println("receive msg from server :" + msg);
+    }
+
+}
diff --git a/workspace-gateway/src/main/resources/META-INF/services/org.apache.dubbo.rpc.listener.CallbackListener b/workspace-gateway/src/main/resources/META-INF/services/org.apache.dubbo.rpc.listener.CallbackListener
new file mode 100644
index 0000000..4129a2c
--- /dev/null
+++ b/workspace-gateway/src/main/resources/META-INF/services/org.apache.dubbo.rpc.listener.CallbackListener
@@ -0,0 +1 @@
+com.aliware.tianchi.CallbackListenerImpl
\ No newline at end of file
diff --git a/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java b/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java
new file mode 100644
index 0000000..ce0e419
--- /dev/null
+++ b/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java
@@ -0,0 +1,48 @@
+package com.aliware.tianchi;
+
+import org.apache.dubbo.common.extension.SPI;
+import org.apache.dubbo.rpc.listener.CallbackListener;
+import org.apache.dubbo.rpc.service.CallbackService;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author daofeng.xjf
+ */
+public class CallbackServiceImpl implements CallbackService {
+
+    public CallbackServiceImpl() {
+        timer.schedule(new TimerTask() {
+            @Override
+            public void run() {
+                if (!listeners.isEmpty()) {
+                    for (Map.Entry<String, CallbackListener> entry : listeners.entrySet()) {
+                        try {
+                            entry.getValue().receiveServerMsg(new Date().toString());
+                        } catch (Throwable t1) {
+                            listeners.remove(entry.getKey());
+                        }
+                    }
+                }
+            }
+        }, 5000, 5000);
+    }
+
+    private Timer timer = new Timer();
+
+    /**
+     * key: listener type
+     * value: callback listener
+     */
+    private final Map<String, CallbackListener> listeners = new ConcurrentHashMap<>();
+
+    @Override
+    public void addListener(String key, CallbackListener listener) {
+        listeners.put(key, listener);
+        listener.receiveServerMsg(new Date().toString()); // send notification for change
+    }
+}
diff --git a/workspace-provider/src/main/resources/META-INF/services/org.apache.dubbo.rpc.service.CallbackService b/workspace-provider/src/main/resources/META-INF/services/org.apache.dubbo.rpc.service.CallbackService
new file mode 100644
index 0000000..8a4b397
--- /dev/null
+++ b/workspace-provider/src/main/resources/META-INF/services/org.apache.dubbo.rpc.service.CallbackService
@@ -0,0 +1 @@
+com.aliware.tianchi.CallbackServiceImpl
\ No newline at end of file
-- 
GitLab