Esempio n. 1
0
        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());
        }
Esempio n. 2
0
 private static MondValue Serialize(MondState state, MondValue instance, params MondValue[] args)
 {
     return(instance.Serialize());
 }
Esempio n. 3
0
 public static string Serialize([MondInstance] MondValue instance)
 {
     return(instance.Serialize());
 }
Esempio n. 4
0
        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;
            }
        }