1111@file:Suppress(" ktlint:standard:no-wildcard-imports" )
1212
1313package irony.pycharm.qsseditor
14+
1415import com.intellij.openapi.diagnostic.logger
16+ import com.intellij.util.ui.update.MergingUpdateQueue
17+ import com.intellij.util.ui.update.Update
1518import kotlinx.serialization.json.*
1619import okhttp3.*
20+ import org.jetbrains.annotations.Nullable
1721import java.util.concurrent.TimeUnit
1822
1923private val Log = logger<QSSClient >()
@@ -24,7 +28,7 @@ interface MessageListener {
2428
2529class KeywordsListener : MessageListener {
2630 override fun onParams (array : JsonArray ) {
27- Log .info( " onParams: $array " )
31+ // TODO: 添加关键词
2832 }
2933}
3034
@@ -37,14 +41,15 @@ class QSSClient : WebSocketListener() {
3741 webSocket : WebSocket ,
3842 response : Response ,
3943 ) {
44+ twice = 0
4045 Log .debug(" onOpen" )
4146 }
4247
4348 override fun onMessage (
4449 webSocket : WebSocket ,
4550 text : String ,
4651 ) {
47- Log .debug(" onMessage: $text " )
52+ // Log.debug("onMessage: $text")
4853 if (text.isNotEmpty()) {
4954 val json = Json .parseToJsonElement(text).jsonObject
5055 if (json.getValue(
@@ -79,7 +84,9 @@ class QSSClient : WebSocketListener() {
7984 t : Throwable ,
8085 response : Response ? ,
8186 ) {
82- Log .warn(" onFailure, ${t.message} " )
87+ if (twice < 50 ) {
88+ Log .warn(" onFailure, ${t.message} " )
89+ }
8390 if (done) {
8491 Log .info(" client require shutdown" )
8592 return
@@ -91,10 +98,13 @@ class QSSClient : WebSocketListener() {
9198 companion object {
9299 private var host: String = " "
93100 private var port: Int = 0
101+ private var twice: Int = 0
94102 private var done: Boolean = false
95103 private var self: QSSClient ? = null
96104 private var client: OkHttpClient ? = null
97105 private var socket: WebSocket ? = null
106+ private var queue: MergingUpdateQueue ? = null
107+ private var messages: MutableMap <String , List <String >> = mutableMapOf ()
98108 private var listener: HashMap <String , MessageListener > = HashMap ()
99109
100110 fun connect (
@@ -114,6 +124,8 @@ class QSSClient : WebSocketListener() {
114124
115125 if (self == null ) {
116126 self = QSSClient ()
127+ queue = MergingUpdateQueue (" QSSClient" , 2000 , true , MergingUpdateQueue .ANY_COMPONENT , null )
128+ queue!! .setRestartTimerOnAdd(true )
117129 }
118130 if (client == null ) {
119131 client = OkHttpClient .Builder ().pingInterval(5 , TimeUnit .SECONDS ).connectTimeout(30 , TimeUnit .SECONDS ).build()
@@ -129,7 +141,10 @@ class QSSClient : WebSocketListener() {
129141 host : String ,
130142 port : Int ,
131143 ) {
132- Log .debug(" do reconnect" )
144+ if (twice < 50 ) {
145+ twice = twice.inc()
146+ Log .debug(" do reconnect" )
147+ }
133148 socket = client!! .newWebSocket(Request .Builder ().url(" ws://$host :$port " ).build(), self!! )
134149 }
135150
@@ -161,12 +176,44 @@ class QSSClient : WebSocketListener() {
161176 }.toString()
162177 }
163178
164- fun applyStyle (message : List <String >) {
165- socket!! .send(buildMessage(" setStyleSheet" , message))
179+ private fun sendMessage (
180+ method : String ,
181+ @Nullable message : List <String >,
182+ delay : Boolean = false,
183+ ) {
184+ if (message.isEmpty()) {
185+ return
186+ }
187+ if (delay) {
188+ messages.clear()
189+ messages[method] = message
190+ queue?.queue(
191+ object : Update (method) {
192+ override fun run () {
193+ for (item in messages) {
194+ sendMessage(item.key, item.value, false )
195+ }
196+ }
197+ },
198+ )
199+ } else {
200+ // Log.info("sendMessage: method=$method, message=" + message.joinToString("\n"))
201+ socket!! .send(buildMessage(method, message))
202+ }
203+ }
204+
205+ fun applyStyle (
206+ @Nullable message : List <String >,
207+ delay : Boolean = false,
208+ ) {
209+ sendMessage(" setStyleSheet" , message, delay)
166210 }
167211
168- fun selectWidget (message : List <String >) {
169- socket!! .send(buildMessage(" selectWidget" , message))
212+ fun selectWidget (
213+ @Nullable message : List <String >,
214+ delay : Boolean = false,
215+ ) {
216+ sendMessage(" selectWidget" , message, delay)
170217 }
171218 }
172219}
0 commit comments