Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 64 additions & 48 deletions wechaty-puppet/src/main/kotlin/Puppet.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ val PUPPET_COUNT = AtomicLong()
* puppet
* @author zhengxin
*/
abstract class Puppet: EventEmitter{
abstract class Puppet : EventEmitter {

@Volatile
protected var state = StateEnum.OFF
Expand All @@ -52,7 +52,7 @@ abstract class Puppet: EventEmitter{
private var id: String? = null
protected var puppetOptions: PuppetOptions? = null

private val watchDog:WatchDog
private val watchDog: WatchDog

/**
*
Expand All @@ -63,10 +63,10 @@ abstract class Puppet: EventEmitter{
count.addAndGet(1)
this.puppetOptions = puppetOptions

val timeOut = puppetOptions.timeout ?:DEFAULT_WATCHDOG_TIMEOUT
watchDog = WatchDog(1000 * timeOut,"puppet")
val timeOut = puppetOptions.timeout ?: DEFAULT_WATCHDOG_TIMEOUT
watchDog = WatchDog(1000 * timeOut, "puppet")

on("heartbeat",object :PuppetHeartbeatListener{
on("heartbeat", object : PuppetHeartbeatListener {
override fun handler(payload: EventHeartbeatPayload) {
log.info("heartbeat -> ${payload.data}")
val watchdogFood = WatchdogFood(1000 * timeOut)
Expand All @@ -77,20 +77,20 @@ abstract class Puppet: EventEmitter{



this.watchDog.on("reset",object : WatchdogListener{
this.watchDog.on("reset", object : WatchdogListener {
override fun handler(event: WatchdogFood) {
val payload = EventResetPayload(JsonUtils.write(event))
emit("reset",payload)
emit("reset", payload)
}
})

// 一秒只有一次
val rateLimiter = RateLimiter.create(1.0)

on("reset",object :PuppetResetListener{
on("reset", object : PuppetResetListener {
override fun handler(payload: EventResetPayload) {
log.info("get a reset message")
if(rateLimiter.tryAcquire()){
if (rateLimiter.tryAcquire()) {
reset(payload.data)
}
}
Expand All @@ -115,15 +115,15 @@ abstract class Puppet: EventEmitter{
cacheMessagePayload = Caffeine.newBuilder().build()
}

private fun initHeart(){
private fun initHeart() {

executorService.scheduleAtFixedRate({
if(state == StateEnum.ON) {
if (state == StateEnum.ON) {
val incrementAndGet = HEARTBEAT_COUNTER.incrementAndGet()
log.info("HEARTBEAT_COUNTER #{}", incrementAndGet)
ding("`recover CPR #${incrementAndGet}")
}
},HOSTIE_KEEPALIVE_TIMEOUT,HOSTIE_KEEPALIVE_TIMEOUT,TimeUnit.MILLISECONDS)
}, HOSTIE_KEEPALIVE_TIMEOUT, HOSTIE_KEEPALIVE_TIMEOUT, TimeUnit.MILLISECONDS)

// heartbeatTimerId = vertx.setPeriodic(HOSTIE_KEEPALIVE_TIMEOUT) { id ->
// if(state == StateEnum.ON) {
Expand All @@ -141,18 +141,18 @@ abstract class Puppet: EventEmitter{

//dong
fun on(event: String, listener: PuppetDongListener) {
super.on(event,object:Listener{
super.on(event, object : Listener {
override fun handler(vararg any: Any) {

log.info("class Type is {}",any[0].javaClass.name)
log.info("class Type is {}", any[0].javaClass.name)

listener.handler(any[0] as EventDongPayload)
}
})
}

fun on(event: String, listener: PuppetFriendshipListener) {
super.on(event,object:Listener{
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventFriendshipPayload)
}
Expand All @@ -161,43 +161,59 @@ abstract class Puppet: EventEmitter{

//dong
fun on(event: String, listener: PuppetLogoutListener) {
super.on(event,object:Listener{
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventLogoutPayload)
}
})
}

fun on(event: String,listener: PuppetRoomInviteListener){
super.on(event,object:Listener{
fun on(event: String, listener: PuppetRoomInviteListener) {
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventRoomInvitePayload)
}
})

}

fun on(event: String,listener: PuppetRoomJoinListerner){
super.on(event,object :Listener{
fun on(event: String, listener: PuppetRoomJoinListener) {
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventRoomJoinPayload)
}
})
}

fun on(event: String,listener: PuppetErrorListener){
super.on(event,object:Listener{
fun on(event: String, listener: PuppetRoomLeaveListener) {
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventRoomLeavePayload)
}
})
}

fun on(event: String, listener: PuppetRoomTopicListener) {
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventRoomTopicPayload)
}
})
}

fun on(event: String, listener: PuppetErrorListener) {
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventErrorPayload)
}
})
}

fun on(event: String, listener: PuppetScanListener) {
super.on(event,object:Listener{
super.on(event, object : Listener {
override fun handler(vararg any: Any) {

log.info("class Type is {}",any[0].javaClass.name)
log.info("class Type is {}", any[0].javaClass.name)

listener.handler(any[0] as EventScanPayload)
}
Expand All @@ -206,50 +222,50 @@ abstract class Puppet: EventEmitter{
}

fun on(event: String, listener: PuppetLoginListener) {
super.on(event,object:Listener{
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventLoginPayload)
}
})
}

fun on(event: String, listener: PuppetReadyListener) {
super.on(event,object:Listener{
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventReadyPayload)
}
})
}

fun on(event: String, listener: PuppetMessageListener) {
super.on(event,object:Listener{
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventMessagePayload)
}
})
}

fun on(event:String,listener: PuppetHeartbeatListener){
super.on(event,object:Listener{
fun on(event: String, listener: PuppetHeartbeatListener) {
super.on(event, object : Listener {
override fun handler(vararg any: Any) {

log.info("class Type is {}",any[0].javaClass.name)
log.info("class Type is {}", any[0].javaClass.name)

listener.handler(any[0] as EventHeartbeatPayload)
}
})
}

fun on(event:String,listener: PuppetResetListener){
super.on(event,object:Listener{
fun on(event: String, listener: PuppetResetListener) {
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as EventResetPayload)
}
})
}

fun on(event: String,listener: WatchdogListener){
super.on(event,object :Listener{
fun on(event: String, listener: WatchdogListener) {
super.on(event, object : Listener {
override fun handler(vararg any: Any) {
listener.handler(any[0] as WatchdogFood)
}
Expand All @@ -259,7 +275,7 @@ abstract class Puppet: EventEmitter{

abstract fun start(): Future<Void>
abstract fun stop(): Future<Void>
open fun unref(){
open fun unref() {

}

Expand Down Expand Up @@ -352,20 +368,20 @@ abstract class Puppet: EventEmitter{
log.info("contractId is {}", contactId)
val roomList = roomList().get()
val roomPayloadFuture: List<CompletableFuture<RoomPayload>> = roomList
.map { roomId: String ->
roomPayload(
roomId
)
}
.map(FutureUtils::toCompletable)
.map { roomId: String ->
roomPayload(
roomId
)
}
.map(FutureUtils::toCompletable)
val resultRoomIdList =
FutureUtils.sequence(roomPayloadFuture)
FutureUtils.sequence(roomPayloadFuture)
val roomPayloadList = resultRoomIdList.get()
val result =
roomPayloadList.filter { t: RoomPayload ->
val memberIdList = t.memberIdList
contactId in memberIdList
}.map(RoomPayload::id)
roomPayloadList.filter { t: RoomPayload ->
val memberIdList = t.memberIdList
contactId in memberIdList
}.map(RoomPayload::id)
return CompletableFuture.completedFuture(result)
}

Expand Down Expand Up @@ -401,7 +417,7 @@ abstract class Puppet: EventEmitter{

val contactPayload = cacheContactPayload.getIfPresent(contactId)

log.info("contactPayload is {} by id {}", contactPayload,contactId)
log.info("contactPayload is {} by id {}", contactPayload, contactId)
return contactPayload
}

Expand Down Expand Up @@ -499,7 +515,7 @@ abstract class Puppet: EventEmitter{

abstract fun messageContact(messageId: String): Future<String>
abstract fun messageFile(messageId: String): Future<FileBox>
abstract fun messageImage(messageId: String,imageType:ImageType): Future<FileBox>
abstract fun messageImage(messageId: String, imageType: ImageType): Future<FileBox>
abstract fun messageMiniProgram(messageId: String): Future<MiniProgramPayload>
abstract fun messageUrl(messageId: String): Future<UrlLinkPayload>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,15 @@ interface PuppetResetListener{
}

@FunctionalInterface
interface PuppetRoomJoinListerner{
interface PuppetRoomJoinListener{
fun handler(payload: EventRoomJoinPayload)
// override fun handler0(vararg any: Any) {
// handler(any[0] as EventRoomJoinPayload)
// }
}

@FunctionalInterface
interface PuppetRoomLeaveListerner{
interface PuppetRoomLeaveListener{
fun handler(payload: EventRoomLeavePayload)
// override fun handler0(vararg any: Any) {
// handler(any[0] as EventRoomLeavePayload)
Expand Down
17 changes: 1 addition & 16 deletions wechaty/src/main/java/io/github/wechaty/examples/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,16 @@


import io.github.wechaty.MessageListener;
import io.github.wechaty.ScanListener;
import io.github.wechaty.Wechaty;
import io.github.wechaty.filebox.FileBox;
import io.github.wechaty.user.Contact;
import io.github.wechaty.user.Room;
import io.github.wechaty.utils.QrcodeUtils;
import okhttp3.*;
import org.apache.commons.io.FileUtils;
import okhttp3.OkHttpClient;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.stream.Collectors;


public class Main {
Expand All @@ -45,17 +38,10 @@ public static void main(String[] args) throws ExecutionException, InterruptedExc
if (StringUtils.equals(text, "#ding")) {
if (room != null) {
room.say("dong");
} else {
from.say("dong");
}
}
});

bot.on("room-join", (room, inviteeList, inviter, date) -> {
List<String> nameList = inviteeList.stream().map(Contact::name).collect(Collectors.toList());
room.say("欢迎" + nameList + "加入群聊");

});
bot.start(true);
// }

Expand All @@ -78,5 +64,4 @@ public static void main(String[] args) throws ExecutionException, InterruptedExc
}



}
Loading