I'm currently building an Erlang language kernel backend for IPython, and I'm testing it out in the console.
What I have working:
- Start ipython console and the erlang kernel
- Erlang kernel reads contents of kernel.json file which contains all the port numbers for zmq
- Create zmq bindings for the
shell,heartbeat,control,iopubsockets using the erlzmq2 library. - Created functions to parse messages from IPython
- Create a process for the heartbeat server to run on and return messages to IPython
- Created a process for the Shell Socket to receive and respond to the following messages
- kernel_info_request -> kernel_info_reply
- execute_request -> execute_reply
- Also, the iopub socket sends these messages
- status
- pyout
If you're still with me, all of this works.
The first IPython In[1]: prompt appears and I can type code, send it to the backend and receive the execute_request message from ipython.
However, my problem is after this sequence of events where I receive an execute_request:
- sent a busy status to IPython
- executed the code and captured the output string
- sent pyout message to IPython
- sent execute_reply to IPython
- sent idle status to IPython
After these messages are sent, nothing happens. I receive no more messages from IPython and the code execution is not output to the console, nor does a new prompt appear requesting more input from the user.
I'm just wondering if I'm sending the messages in the correct order, or am I sending the correct messages?
