Hello,
I am experimenting with script IO in preparation for hosting an IRB
session via an embedded SSH server and/or embedded HTTP server, but I’m
having trouble getting the script environment to use a custom stream for
standard input. I used the following code for setting up my IronRuby
environment:
public Form1()
{
InitializeComponent();
_stdIn = new MemoryStream();
_inputWriter = new StreamWriter(_stdIn);
txtStandardIn.KeyPress+=(s,e)=>
{
_inputWriter.Write(e.KeyChar);
_inputWriter.Flush();
Debug.Write(e.KeyChar);
};
_stdOut = new FifoStream();
_outputReader = new StreamReader(_stdOut);
_stdOut.DataArrived += StdOutDataArrived;
_scriptEngine = Ruby.CreateEngine();
_globalScope = _scriptEngine.CreateScope();
_scriptEngine.Runtime.IO.SetInput(_stdIn, Encoding.Default);
_scriptEngine.Runtime.IO.SetOutput(_stdOut,
Encoding.Default);
}
If I write “hello” + Environment.NewLine to the input stream and flush
the writer and then use the ScriptEngine e to execute a “x = gets” - x
is always nil. However, if I use the script engine to execute “puts
‘hello’” my custom output stream is used and I see my output.
I feel like I am missing a key ingredient in my setup process - any help
would be appreciated.
Thanks,
Nathan