public static void Update() { while (updatedSockets.Count > 0) { Socket socket = updatedSockets.Dequeue(); if (!socketCode.ContainsKey(socket)) { continue; } string code = socketCode[socket]; try { ClojureAssetPostprocessor.SetupLoadPath(); // TODO this is sloppy and should be moved var result = RT.var("unityRepl", "repl-eval-string").invoke(code, new AsyncReplTextWriter(socket)); byte[] byteData = Encoding.ASCII.GetBytes(System.Convert.ToString(result)); socket.BeginSend(byteData, 0, byteData.Length, 0, (ar) => { }, socket); output = "--> " + code + result + "\n" + output; socketCode.Remove(socket); } catch (System.IO.EndOfStreamException e) { // incomplete form, wait } catch (System.Exception e) { Debug.LogException(e); socketCode.Remove(socket); byte[] byteData = Encoding.ASCII.GetBytes(e.ToString()); socket.BeginSend(byteData, 0, byteData.Length, 0, (ar) => { }, socket); } } }
static ClojureRepl() { // TODO read from config ClojureAssetPostprocessor.SetupLoadPath(); ClojureRepl.StartREPL(); }