private void ProcessMessages() { while (true) { KiMessage message = KiMessage.Receive(tcp.Client); if (message == null) { // if DMessage.Receive() returns null, detach. tcp.Close(); Detached?.Invoke(this, EventArgs.Empty); return; } else if (message[0].Tag == KiTag.NFY) { switch ((KiNotify)(int)message[1]) { case KiNotify.Detach: tcp.Close(); Detached?.Invoke(this, EventArgs.Empty); return; case KiNotify.Log: LogOp type = (LogOp)(int)message[2]; string debugText = (string)message[3]; string prefix = type == LogOp.Trace ? "trace" : "log"; Print?.Invoke(this, new TraceEventArgs(string.Format("{0}: {1}", prefix, debugText))); break; case KiNotify.Pause: FileName = (string)message[2]; LineNumber = (int)message[4]; Running = false; Status?.Invoke(this, EventArgs.Empty); break; case KiNotify.Resume: Running = true; Status?.Invoke(this, EventArgs.Empty); break; case KiNotify.Throw: Throw?.Invoke(this, new ThrowEventArgs( (string)message[3], (string)message[4], (int)message[5], (int)message[2] != 0)); break; } } else if (message[0].Tag == KiTag.REP || message[0].Tag == KiTag.ERR) { lock (replyLock) { KiMessage request = requests.Dequeue(); replies.Add(request, message); } } } }
void AddLog(LogOp op, int offset, int size) { // TODO: call callbacks bool was_modified = modified; modified = true; if (!save_log) return; if (null == log_buffer) log_buffer = new EditBuffer(String.Format("*log <{0}>", name), BufferFlags.System); LimitLogSize(); // TODO: finish me }