当前位置: 首页>>代码示例>>Golang>>正文


Golang FileDescriptor.GetService方法代码示例

本文整理汇总了Golang中github.com/gogo/protobuf/protoc-gen-gogo/generator.FileDescriptor.GetService方法的典型用法代码示例。如果您正苦于以下问题:Golang FileDescriptor.GetService方法的具体用法?Golang FileDescriptor.GetService怎么用?Golang FileDescriptor.GetService使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在github.com/gogo/protobuf/protoc-gen-gogo/generator.FileDescriptor的用法示例。


在下文中一共展示了FileDescriptor.GetService方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: Generate

func (p *html) Generate(file *generator.FileDescriptor) {
	p.PluginImports = generator.NewPluginImports(p.Generator)
	httpPkg := p.NewImport("net/http")
	p.jsonPkg = p.NewImport("encoding/json")
	p.ioPkg = p.NewImport("io")
	contextPkg := p.NewImport("golang.org/x/net/context")
	p.reflectPkg = p.NewImport("reflect")
	p.stringsPkg = p.NewImport("strings")
	p.strconvPkg = p.NewImport("strconv")
	logPkg := p.NewImport("log")
	grpcPkg := p.NewImport("google.golang.org/grpc")

	p.P(`var DefaultHtmlStringer = func(req, resp interface{}) ([]byte, error) {`)
	p.In()
	p.P(`header := []byte("<p><div class=\"container\"><pre>")`)
	p.P(`data, err := `, p.jsonPkg.Use(), `.MarshalIndent(resp, "", "\t")`)
	p.P(`if err != nil {`)
	p.In()
	p.P(`return nil, err`)
	p.Out()
	p.P(`}`)
	p.P(`footer := []byte("</pre></div></p>")`)
	p.P(`return append(append(header, data...), footer...), nil`)
	p.Out()
	p.P(`}`)

	p.P(`func Serve(httpAddr, grpcAddr string, stringer func(req, resp interface{}) ([]byte, error), opts ...`, grpcPkg.Use(), `.DialOption) {`)
	p.In()
	p.P(`conn, err := `, grpcPkg.Use(), `.Dial(grpcAddr, opts...)`)
	p.P(`if err != nil {`)
	p.In()
	p.P(logPkg.Use(), `.Fatalf("Dial(%q) = %v", grpcAddr, err)`)
	p.Out()
	p.P(`}`)
	for _, s := range file.GetService() {
		origServName := s.GetName()
		servName := generator.CamelCase(origServName)
		p.P(origServName, `Client := New`, servName, `Client(conn)`)
		p.P(origServName, `Server := NewHTML`, servName, `Server(`, origServName, `Client, stringer)`)
		for _, m := range s.GetMethod() {
			p.P(httpPkg.Use(), `.HandleFunc("/`, servName, `/`, m.GetName(), `", `, origServName, `Server.`, m.GetName(), `)`)
		}
	}
	p.P(`if err := `, httpPkg.Use(), `.ListenAndServe(httpAddr, nil); err != nil {`)
	p.In()
	p.P(logPkg.Use(), `.Fatal(err)`)
	p.Out()
	p.P(`}`)
	p.Out()
	p.P(`}`)

	for _, s := range file.GetService() {
		origServName := s.GetName()
		servName := generator.CamelCase(origServName)
		p.P(`type html`, servName, ` struct {`)
		p.In()
		p.P(`client `, servName, `Client`)
		p.P(`stringer func(req, resp interface{}) ([]byte, error)`)
		p.Out()
		p.P(`}`)

		p.P(`func NewHTML`, servName, `Server(client `, servName, `Client, stringer func(req, resp interface{}) ([]byte, error)) *html`, servName, ` {`)
		p.In()
		p.P(`return &html`, servName, `{client, stringer}`)
		p.Out()
		p.P(`}`)

		for _, m := range s.GetMethod() {
			p.generateFormFunc(servName, m)
			p.P(``)
			p.P(`func (this *html`, servName, `) `, m.GetName(), `(w `, httpPkg.Use(), `.ResponseWriter, req *`, httpPkg.Use(), `.Request) {`)
			p.In()
			p.P("w.Write([]byte(Header(`", servName, "`,`", m.GetName(), "`)))")
			p.P(`jsonString := req.FormValue("json")`)
			p.P(`someValue := false`)
			p.RecordTypeUse(m.GetInputType())
			p.P(`msg := &`, p.typeName(m.GetInputType()), `{}`)
			p.P(`if len(jsonString) > 0 {`)
			p.In()
			p.P(`err := `, p.jsonPkg.Use(), `.Unmarshal([]byte(jsonString), msg)`)
			p.writeError(errString)
			p.P(`someValue = true`)
			p.Out()
			p.P(`}`)
			p.P(`w.Write([]byte(Form`, servName, `_`, m.GetName(), `))`)
			p.P(`if someValue {`)
			p.In()
			if !m.GetClientStreaming() {
				if !m.GetServerStreaming() {
					p.P(`reply, err := this.client.`, m.GetName(), `(`, contextPkg.Use(), `.Background(), msg)`)
					p.writeError(errString)
					p.P(`out, err := this.stringer(msg, reply)`)
					p.writeError(errString)
					p.P(`w.Write(out)`)
				} else {
					p.P(`down, err := this.client.`, m.GetName(), `(`, contextPkg.Use(), `.Background(), msg)`)
					p.writeError(errString)
					p.P(`for {`)
					p.In()
					p.P(`reply, err := down.Recv()`)
//.........这里部分代码省略.........
开发者ID:ivucica,项目名称:letmegrpc,代码行数:101,代码来源:html.go


注:本文中的github.com/gogo/protobuf/protoc-gen-gogo/generator.FileDescriptor.GetService方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。