Publish ExecStatusEvent taking into account its channel name

This commit is contained in:
Alexey Alekhin 2017-11-14 21:53:15 +01:00
parent 5c394e18f6
commit 6b6047b55c
1 changed files with 26 additions and 9 deletions

View File

@ -26,7 +26,7 @@ import sbt.internal.server._
import sbt.internal.langserver.{ LogMessageParams, MessageType } import sbt.internal.langserver.{ LogMessageParams, MessageType }
import sbt.internal.util.{ StringEvent, ObjectEvent, MainAppender } import sbt.internal.util.{ StringEvent, ObjectEvent, MainAppender }
import sbt.internal.util.codec.JValueFormats import sbt.internal.util.codec.JValueFormats
import sbt.protocol.{ EventMessage, Serialization } import sbt.protocol.{ EventMessage, ExecStatusEvent }
import sbt.util.{ Level, Logger, LogExchange } import sbt.util.{ Level, Logger, LogExchange }
/** /**
@ -170,10 +170,11 @@ private[sbt] final class CommandExchange {
def publishEvent[A: JsonFormat](event: A): Unit = { def publishEvent[A: JsonFormat](event: A): Unit = {
val broadcastStringMessage = true val broadcastStringMessage = true
val toDel: ListBuffer[CommandChannel] = ListBuffer.empty val toDel: ListBuffer[CommandChannel] = ListBuffer.empty
event match { event match {
case entry: StringEvent => case entry: StringEvent =>
val params = toLogMessageParams(entry) val params = toLogMessageParams(entry)
channels.foreach { channels collect {
case c: ConsoleChannel => case c: ConsoleChannel =>
if (broadcastStringMessage) { if (broadcastStringMessage) {
c.publishEvent(event) c.publishEvent(event)
@ -201,7 +202,7 @@ private[sbt] final class CommandExchange {
} }
} }
case _ => case _ =>
channels.foreach { channels collect {
case c: ConsoleChannel => case c: ConsoleChannel =>
c.publishEvent(event) c.publishEvent(event)
case c: NetworkChannel => case c: NetworkChannel =>
@ -243,7 +244,7 @@ private[sbt] final class CommandExchange {
JField("execId", JString(execId)) JField("execId", JString(execId))
})): _* })): _*
) )
channels.foreach { channels collect {
case c: ConsoleChannel => case c: ConsoleChannel =>
c.publishEvent(json) c.publishEvent(json)
case c: NetworkChannel => case c: NetworkChannel =>
@ -268,16 +269,32 @@ private[sbt] final class CommandExchange {
val toDel: ListBuffer[CommandChannel] = ListBuffer.empty val toDel: ListBuffer[CommandChannel] = ListBuffer.empty
event match { event match {
// Special treatment for ConsolePromptEvent since it's hand coded without codec. // Special treatment for ConsolePromptEvent since it's hand coded without codec.
case e: ConsolePromptEvent => case entry: ConsolePromptEvent =>
channels collect { channels collect {
case c: ConsoleChannel => c.publishEventMessage(e) case c: ConsoleChannel => c.publishEventMessage(entry)
} }
case e: ConsoleUnpromptEvent => case entry: ConsoleUnpromptEvent =>
channels collect { channels collect {
case c: ConsoleChannel => c.publishEventMessage(e) case c: ConsoleChannel => c.publishEventMessage(entry)
}
case entry: ExecStatusEvent =>
channels collect {
case c: ConsoleChannel =>
if (entry.channelName.isEmpty || entry.channelName == Some(c.name)) {
c.publishEventMessage(event)
}
case c: NetworkChannel =>
try {
if (entry.channelName == Some(c.name)) {
c.publishEventMessage(event)
}
} catch {
case e: SocketException =>
toDel += c
}
} }
case _ => case _ =>
channels.foreach { channels collect {
case c: ConsoleChannel => case c: ConsoleChannel =>
c.publishEventMessage(event) c.publishEventMessage(event)
case c: NetworkChannel => case c: NetworkChannel =>