@@ -29,7 +29,9 @@ import com.google.gson.JsonObject
2929import com.google.gson.JsonParser
3030import com.google.gson.reflect.TypeToken
3131import okhttp3.HttpUrl
32+ import org.phoenixframework.Defaults.gson
3233import java.net.URL
34+ import javax.swing.text.html.HTML.Tag.P
3335
3436object Defaults {
3537
@@ -68,41 +70,50 @@ object Defaults {
6870 @Suppress(" UNCHECKED_CAST" )
6971 val decode: DecodeClosure = { rawMessage ->
7072
73+ val parseValue: (String ) -> String? = { value ->
74+ when (value) {
75+ " null" -> null
76+ else -> value.replace(" \" " , " " )
77+ }
78+ }
79+
7180 var message = rawMessage
7281 message = message.removeRange(0 , 1 ) // remove '['
7382
74- val joinRef = message.takeWhile { it != ' ,' } // take join ref, ' null' or '5'
83+ val joinRef = message.takeWhile { it != ' ,' } // take " join ref", " null" or "\"5\""
7584 message = message.removeRange(0 , joinRef.length) // remove join ref
7685 message = message.removeRange(0 , 1 ) // remove ','
7786
78- val ref = message.takeWhile { it != ' ,' } // take ref, ' null' or '5'
87+ val ref = message.takeWhile { it != ' ,' } // take ref, " null" or "\"5\""
7988 message = message.removeRange(0 , ref.length) // remove ref
80- message = message.removeRange(0 , 2 ) // remove '," '
89+ message = message.removeRange(0 , 1 ) // remove ','
8190
82- val topic = message.takeWhile { it != ' " ' }
91+ val topic = message.takeWhile { it != ' , ' } // take topic, "\"topic\""
8392 message = message.removeRange(0 , topic.length)
84- message = message.removeRange(0 , 3 ) // remove '"," '
93+ message = message.removeRange(0 , 1 ) // remove ', '
8594
86- val event = message.takeWhile { it != ' " ' }
95+ val event = message.takeWhile { it != ' , ' } // take event, "\"phx_reply\""
8796 message = message.removeRange(0 , event.length)
88- message = message.removeRange(0 , 2 ) // remove '" ,'
97+ message = message.removeRange(0 , 1 ) // remove ','
8998
90- val remaining = message.removeRange(message.length - 1 , message.length)
99+ var remaining = message.removeRange(message.length - 1 , message.length) // remove ']'
91100
101+ // Payload should now just be "{"message":"hello","from":"user_1"}" or
102+ // "{"response": {"message":"hello","from":"user_1"}},"status":"ok"}", flatten.
92103 val jsonObj = gson.fromJson(remaining, JsonObject ::class .java)
93104 val response = jsonObj.get(" response" )
94- val payload = response?.let { gson.toJson(response) } ? : remaining
105+ val payload = response?.let { gson.toJson(response) } ? : remaining
95106
96107 val anyType = object : TypeToken <Map <String , Any >>() {}.type
97108 val result = gson.fromJson<Map <String , Any >>(remaining, anyType)
98109
99110 // vsn=2.0.0 message structure
100111 // [join_ref, ref, topic, event, payload]
101112 Message (
102- joinRef = joinRef.toIntOrNull()?.toString( ),
103- ref = ref.toIntOrNull()?.toString( ) ? : " " ,
104- topic = topic,
105- event = event,
113+ joinRef = parseValue(joinRef ),
114+ ref = parseValue(ref ) ? : " " ,
115+ topic = parseValue( topic) ? : " " ,
116+ event = parseValue( event) ? : " " ,
106117 rawPayload = result,
107118 payloadJson = payload
108119 )
0 commit comments