Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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
        }