public static string ExecuteMond(string source) { outputBuffer.Clear(); try { MondValue result = MondState.Run(source, "Halbmondbox"); if (result != MondValue.Undefined) { Console.WriteLine("Result: "); Console.WriteLine(result.Serialize()); output.WriteLine(); if (result["moveNext"]) { output.WriteLine("sequence (15 max):"); foreach (var i in result.Enumerate(MondState).Take(15)) { output.WriteLine(i.Serialize()); } } else { output.WriteLine(result.Serialize()); } } } catch (Exception e) { Console.WriteLine(e.Message); output.WriteLine(e.Message); } return(outputBuffer.ToString()); }
private static MondValue Serialize(MondState state, MondValue instance, params MondValue[] args) { return(instance.Serialize()); }
public static string Serialize([MondInstance] MondValue instance) { return(instance.Serialize()); }
static void MessageReceived(object peerObj) { NetPeer peer = (NetPeer)peerObj; NetIncomingMessage inc = peer.ReadMessage(); NetOutgoingMessage outMsg = client.CreateMessage(); switch (inc.MessageType) { case NetIncomingMessageType.DebugMessage: case NetIncomingMessageType.VerboseDebugMessage: case NetIncomingMessageType.WarningMessage: case NetIncomingMessageType.ErrorMessage: Console.WriteLine("Lidgren: {0}", inc.ReadString()); return; case NetIncomingMessageType.Data: //Console.WriteLine("Message received"); string command = inc.ReadString(); if (command == "prgm") { outMsg.Write("result"); List <MondValue> args = new List <MondValue>(); int argCount = inc.ReadInt32(); if (argCount > 0) { for (var i = 0; i < argCount; i++) { string argType = inc.ReadString(); Console.WriteLine(argType); switch (argType) { case "Int32": args.Add(new MondValue(inc.ReadInt32())); break; case "String": args.Add(new MondValue(inc.ReadString())); break; case "Boolean": args.Add(new MondValue(inc.ReadBoolean() ? 1 : 0)); break; default: Console.WriteLine("Invalid argument type: {0}", argType); break; } } } string prgm = inc.ReadString(); string file = inc.ReadString(); Console.WriteLine("Program received. Args: {0}", argCount); MondValue func = null; try { func = mondState.Run(prgm, file); } catch (MondCompilerException ex) { Console.WriteLine("MondCompilerException: {0}", ex.Message); if (ex.InnerException != null) { Console.WriteLine("Inner ({0}): {1}", ex.GetType().Name, ex.InnerException.Message); } outMsg.Write("error"); outMsg.Write(ex.Message); client.SendMessage(outMsg, NetDeliveryMethod.ReliableOrdered); break; } if (func.Type != MondValueType.Function) { Console.WriteLine("Invalid return type: {0} ({1})", func.Type, func.Serialize()); outMsg.Write("error"); outMsg.Write("wrong return type; expected function"); client.SendMessage(outMsg, NetDeliveryMethod.ReliableOrdered); break; } string result; string type; try { MondValue res = mondState.Call(func, args.ToArray()); result = res.Serialize(); type = res.Type.GetName(); //Console.WriteLine(type); } catch (MondRuntimeException ex) { Console.WriteLine("MondRuntimeException: {0}", ex.Message); if (ex.InnerException != null) { Console.WriteLine("Inner ({0}): {1}", ex.GetType().Name, ex.InnerException.Message); } outMsg.Write("error"); outMsg.Write(ex.Message); client.SendMessage(outMsg, NetDeliveryMethod.ReliableOrdered); break; } Console.WriteLine("Done. Result: {0}", result); outMsg.Write(result); outMsg.Write(type); client.SendMessage(outMsg, NetDeliveryMethod.ReliableOrdered); } break; //case NetIncomingMessageType.DiscoveryRequest: // Console.WriteLine("Discovery request from {0}", inc.SenderEndPoint.ToString()); // outMsg = client.CreateMessage("slave"); // outMsg.Write(name); // client.SendDiscoveryResponse(outMsg, inc.SenderEndPoint); // break; case NetIncomingMessageType.DiscoveryResponse: string peerName = inc.ReadString(); if (peerName == "master") { Console.WriteLine("Found master at {0}", inc.SenderEndPoint); outMsg.Write("slave"); outMsg.Write(name); client.Connect(inc.SenderEndPoint, outMsg); } break; case NetIncomingMessageType.StatusChanged: Console.WriteLine("Status of {0}: {1}", inc.SenderEndPoint.ToString(), ((NetConnectionStatus)inc.ReadByte()).ToString()); string addit = inc.ReadString(); if (!String.IsNullOrEmpty(addit)) { Console.WriteLine("Addit: {0}", addit); } break; } }