예제 #1
0
    public string ArgString(string prefix = null)
    {
        string ret = "";

        if (null == prefix)
        {
            for (int i = 0; i < Args.Count; i++)
            {
                var arg = Args[i];
                ret += TypeDef.ConvertProtoType2CSType(arg.Type) + " " + arg.Name.ToLower();
                if (i != Args.Count - 1)
                {
                    ret += ",";
                }
            }
        }
        else
        {
            for (int i = 0; i < Args.Count; i++)
            {
                var arg  = Args[i];
                var temp = ("" == prefix) ? arg.Name.ToLower() : (prefix + "." + arg.Name.Pascalize());
                ret += temp;
                if (i != Args.Count - 1)
                {
                    ret += ",";
                }
            }
        }

        return(ret);
    }
    public static void ClientConnectionImpl(TextWriter writer, string ClassName, string prefix, List <Function> Functions)
    {
        writer.WriteLine("// Generated by the rpc compiler.  DO NOT EDIT!");
        writer.WriteLine("using System;");
        writer.WriteLine("using System.Collections;");
        writer.WriteLine("using System.Threading.Tasks;");
        writer.WriteLine("using System.Collections.Generic;");
        writer.WriteLine("using Orleans;");
        writer.WriteLine("using Network;");
        writer.WriteLine("using DataContract;");
        writer.WriteLine();
        writer.WriteLine("namespace " + "GrainInterface");
        writer.WriteLine("{");
        writer.WriteLine("");
        writer.WriteLine("    public partial class " + ClassName + ": IClientConnection");
        writer.WriteLine("    {");
        foreach (Function current in Functions)
        {
            writer.Write(Utility.CreateCSharpComment("        ", current.Comment));

            var retString = "public Task ";
            var funcLine  = string.Concat(new string[]
            {
                "        ",
                retString,
                current.FunctionName,
                "("
            });
            for (int i = 0; i < current.Args.Count; i++)
            //foreach (var argument in current.Args)
            {
                var argument = current.Args[i];
                funcLine = string.Concat(funcLine,

                                         TypeDef.ConvertProtoType2CSType(argument.Type),
                                         " ",
                                         argument.Name);
                if (i != current.Args.Count - 1)
                {
                    funcLine += ", ";
                }
            }
            funcLine += ")";
            writer.WriteLine(funcLine);

            writer.WriteLine("    \t{");
            writer.WriteLine("    \t\t_subsManager.Notify(s => s." + current.FunctionName + "(" + current.ArgString("") + "));");
            writer.WriteLine("    \t\treturn Task.CompletedTask;");
            writer.WriteLine("    \t}");

            writer.WriteLine();
        }
        writer.WriteLine("    }");
        writer.WriteLine("}");
    }
예제 #3
0
    public static void GrainInterface(TextWriter writer, string ClassName, string prefix, List <Function> Functions, bool needrv = true)
    {
        writer.WriteLine("// Generated by the rpc compiler.  DO NOT EDIT!");
        writer.WriteLine("using System;");
        writer.WriteLine("using System.Collections;");
        writer.WriteLine("using System.Threading.Tasks;");
        writer.WriteLine("using System.Collections.Generic;");
        writer.WriteLine("using Orleans;");
        writer.WriteLine("using Network;");
        writer.WriteLine("using DataContract;");
        writer.WriteLine();
        writer.WriteLine("namespace " + "GrainInterface");
        writer.WriteLine("{");
        writer.WriteLine("");
        writer.WriteLine("    public partial interface " + ClassName + ": IGrainWithIntegerKey");
        writer.WriteLine("    {");
        foreach (Function current in Functions)
        {
            writer.Write(Utility.CreateCSharpComment("        ", current.Comment));

            var retType = needrv
                                ? ("Task<ReturnValues<" + TypeDef.ConvertProtoType2CSType(current.RetType) + ">>")
                                : ("Task<" + TypeDef.ConvertProtoType2CSType(current.RetType) + ">");
            var retString = (0 == current.RetType.CompareTo("void")) ? "Task " : retType;
            var funcLine  = string.Concat(new string[]
            {
                "        ",
                retString,
                current.FunctionName,
                "("
            });
            for (int i = 0; i < current.Args.Count; i++)
            //foreach (var argument in current.Args)
            {
                var argument = current.Args[i];
                funcLine = string.Concat(funcLine,

                                         TypeDef.ConvertProtoType2CSType(argument.Type),
                                         " ",
                                         argument.Name);
                if (i != current.Args.Count - 1)
                {
                    funcLine += ", ";
                }
            }
            funcLine += ");";
            writer.WriteLine(funcLine);

            writer.WriteLine();
        }
        writer.WriteLine("    }");
        writer.WriteLine("}");
    }
예제 #4
0
    public static void ClientFunctions(TextWriter writer, string ClassName, string prefix, List <Function> Functions)
    {
        writer.WriteLine("// Generated by the rpc compiler.  DO NOT EDIT!");
        writer.WriteLine("using System;");
        writer.WriteLine("using System.Collections;");
        writer.WriteLine("using System.Threading.Tasks;");
        writer.WriteLine("using System.Collections.Generic;");
        writer.WriteLine("using Network;");
        writer.WriteLine("using ProtoBuf;");
        writer.WriteLine("using DataContract;");
        writer.WriteLine();
        writer.WriteLine("namespace " + "GameServer");
        writer.WriteLine("{");
        writer.WriteLine("");
        writer.WriteLine("\tpublic static partial class " + ClassName);
        writer.WriteLine("\t{");

        foreach (Function current in Functions)
        {
            writer.Write(Utility.CreateCSharpComment("        ", current.Comment));

            var args = "(IConnection conn";
            foreach (var argument in current.Args)
            {
                args += ", " + TypeDef.ConvertProtoType2CSType(argument.Type) + " " + argument.Name;
            }
            args += ")";

            writer.WriteLine("\t\tpublic static void " + current.FunctionName + args);
            writer.WriteLine("\t\t{");

            writer.WriteLine("\t\t\t" +
                             "var d = new " +
                             Utility.GetArgType(prefix, current) + "();"
                             );
            foreach (var argument in current.Args)
            {
                writer.WriteLine("\t\t\td." + argument.Name.Pascalize() + " = " + argument.Name + ";");
            }
            writer.WriteLine("");
            writer.WriteLine("\t\t\tvar desc = new ServiceDesc();");
            writer.WriteLine("\t\t\tdesc.Type = 1;");
            writer.WriteLine("\t\t\tdesc.FuncId = " + current.Id + ";");

            writer.WriteLine("\t\t\tconn.Send(desc, d);");

            writer.WriteLine("\t\t}");
            writer.WriteLine("");
        }
        writer.WriteLine("\t}");
        writer.WriteLine("}");
    }
예제 #5
0
    public static void ServerInterface(TextWriter writer, string ClassName, string prefix, List <Function> Functions)
    {
        writer.WriteLine("// Generated by the rpc compiler.  DO NOT EDIT!");
        writer.WriteLine("using System;");
        writer.WriteLine("using System.Collections;");
        writer.WriteLine("using System.Threading.Tasks;");
        writer.WriteLine("using System.Collections.Generic;");
        writer.WriteLine("using Network;");
        writer.WriteLine("using ProtoBuf;");
        writer.WriteLine("using DataContract;");
        writer.WriteLine();
        writer.WriteLine("namespace " + "GameServer");
        writer.WriteLine("{");
        writer.WriteLine("");
        writer.WriteLine("    interface " + ClassName);
        writer.WriteLine("    {");
        foreach (Function current in Functions)
        {
            if (CallDirection.Client2GameServer != current.Direction)
            {
                continue;
            }
            writer.Write(Utility.CreateCSharpComment("        ", current.Comment));

            var retString = (0 == current.RetType.CompareTo("void")) ? "void " : "Task<ReturnValues<" + TypeDef.ConvertProtoType2CSType(current.RetType) + ">> ";
            var funcLine  = string.Concat(new string[]
            {
                "        ",
                retString,
                current.FunctionName,
                " (IConnection conn"
            });
            foreach (var argument in current.Args)
            {
                funcLine = string.Concat(funcLine,
                                         ", ",
                                         TypeDef.ConvertProtoType2CSType(argument.Type),
                                         " ",
                                         argument.Name);
            }
            funcLine += ");";
            writer.WriteLine(funcLine);

            writer.WriteLine();
        }
        writer.WriteLine("    }");
        writer.WriteLine("}");
    }
예제 #6
0
    public static string GetAsCSArgument(Function func)
    {
        string text = "";

        for (int i = 0; i < func.Args.Count - 1; i++)
        {
            string text2 = text;
            text = string.Concat(new string[]
            {
                text2,
                TypeDef.ConvertProtoType2CSType(func.Args[i].Type),
                " ",
                func.Args[i].Name,
                ", "
            });
        }
        return(text + TypeDef.ConvertProtoType2CSType(func.Args[func.Args.Count - 1].Type) + " " + func.Args[func.Args.Count - 1].Name);
    }
예제 #7
0
    public static void ClientInterface(TextWriter writer, string ClassName, string prefix, List <Function> Functions)
    {
        writer.WriteLine("// Generated by the rpc compiler.  DO NOT EDIT!");
        writer.WriteLine("using System;");
        writer.WriteLine("using System.Collections;");
        writer.WriteLine("using System.Collections.Generic;");
        writer.WriteLine("using Network;");
        writer.WriteLine("using ProtoBuf;");
        writer.WriteLine("using DataContract;");
        writer.WriteLine();
        writer.WriteLine("");
        writer.WriteLine("public partial interface " + ClassName);
        writer.WriteLine("{");
        foreach (Function current in Functions)
        {
            writer.Write(Utility.CreateCSharpComment("\t", current.Comment));

            var funcLine = string.Concat(new string[]
            {
                "\t",
                "void ",
                current.FunctionName,
                "(IConnection conn"
            });
            foreach (var argument in current.Args)
            {
                funcLine = string.Concat(funcLine,
                                         ", ",
                                         TypeDef.ConvertProtoType2CSType(argument.Type),
                                         " ",
                                         argument.Name.Pascalize());
            }
            funcLine += ");";
            writer.WriteLine(funcLine);

            writer.WriteLine();
        }
        writer.WriteLine("}");
    }
예제 #8
0
    public static void ServerFunctions2(TextWriter writer, string ClassName, string prefix, List <Function> Functions)
    {
        writer.WriteLine("// Generated by the rpc compiler.  DO NOT EDIT!");
        writer.WriteLine("using System;");
        writer.WriteLine("using System.Collections;");
        writer.WriteLine("using System.Collections.Generic;");
        writer.WriteLine("using Network;");
        writer.WriteLine("using ProtoBuf;");
        writer.WriteLine("using DataContract;");
        writer.WriteLine();
        //writer.WriteLine("namespace " + "Watcher");
        //writer.WriteLine("{");
        writer.WriteLine("");
        writer.WriteLine("public static partial class " + ClassName);
        writer.WriteLine("{");

        foreach (Function current in Functions)
        {
            writer.Write(Utility.CreateCSharpComment("\t", current.Comment));

            bool hasReturnValue = (0 != current.RetType.CompareTo("void"));
            var  retVal         = hasReturnValue ? "NetworkPacketCoroutine<" + Utility.GetRetType(prefix, current) + "> " : "void ";
            var  fun            = "\tpublic static " +
                                  retVal +
                                  current.FunctionName;

            var args = "(IConnection conn";
            foreach (var argument in current.Args)
            {
                args += ", " + TypeDef.ConvertProtoType2CSType(argument.Type) + " " + argument.Name;
            }
            args += ")";
            writer.WriteLine(fun + args);
            writer.WriteLine("\t{");



            if (hasReturnValue)
            {
                writer.WriteLine("\t\tvar packageId = PackageDispatcher.GetNextPackageId();");
                writer.WriteLine("\t\tvar cor = new " + retVal + "(() =>{ PackageDispatcher.UnregisterPackage(packageId); });");

                writer.WriteLine("\t\tPackageDispatcher.RegisterPackage(packageId, (c, d, s) =>");
                writer.WriteLine("\t\t{");
                writer.WriteLine("\t\t\tvar reply = Serializer.Deserialize<" + Utility.GetRetType(prefix, current) + ">(s);");
                writer.WriteLine("\t\t\tcor.SetResponse(d.Error,reply);");
                writer.WriteLine("\t\t\tPackageDispatcher.UnregisterPackage(packageId);");

                writer.WriteLine("\t\t});");
                writer.WriteLine();
            }


            writer.WriteLine("\t\tServiceDesc desc = new ServiceDesc();");
            writer.WriteLine("\t\tdesc.FuncId = " + current.Id + ";");
            if (hasReturnValue)
            {
                writer.WriteLine("\t\tdesc.PacketId = packageId;");
            }

            writer.WriteLine("\t\tvar arg = new " + Utility.GetArgType(prefix, current) + "();");
            foreach (var argument in current.Args)
            {
                writer.WriteLine("\t\targ." + argument.Name.Pascalize() + " = " + argument.Name + ";");
            }

            writer.WriteLine("\t\tconn.Send(desc, arg);");

            writer.WriteLine();
            if (hasReturnValue)
            {
                writer.WriteLine("\t\treturn cor;");
            }

            writer.WriteLine("\t}");
            writer.WriteLine();
        }
        writer.WriteLine("}");
    }