package conversation import ( "Open_IM/pkg/common/constant" _ "Open_IM/pkg/common/db" _ "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" _ "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbConversation "Open_IM/pkg/proto/conversation" "Open_IM/pkg/utils" "context" "net" "strconv" "strings" "Open_IM/pkg/common/config" "google.golang.org/grpc" ) type rpcConversation struct { rpcPort int rpcRegisterName string etcdSchema string etcdAddr []string } func (rpc *rpcConversation) ModifyConversationField(c context.Context, req *pbConversation.ModifyConversationFieldReq) (*pbConversation.ModifyConversationFieldResp, error) { panic("implement me") } func NewRpcConversationServer(port int) *rpcConversation { log.NewPrivateLog(constant.LogFileName) return &rpcConversation{ rpcPort: port, rpcRegisterName: config.Config.RpcRegisterName.OpenImConversationName, etcdSchema: config.Config.Etcd.EtcdSchema, etcdAddr: config.Config.Etcd.EtcdAddr, } } func (rpc *rpcConversation) Run() { log.NewInfo("0", "rpc conversation start...") address := utils.ServerIP + ":" + strconv.Itoa(rpc.rpcPort) listener, err := net.Listen("tcp", address) if err != nil { log.NewError("0", "listen network failed ", err.Error(), address) return } log.NewInfo("0", "listen network success, ", address, listener) //grpc server srv := grpc.NewServer() defer srv.GracefulStop() //service registers with etcd pbConversation.RegisterConversationServer(srv, rpc) err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName, 10) if err != nil { log.NewError("0", "RegisterEtcd failed ", err.Error(), rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName) return } log.NewInfo("0", "RegisterConversationServer ok ", rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), utils.ServerIP, rpc.rpcPort, rpc.rpcRegisterName) err = srv.Serve(listener) if err != nil { log.NewError("0", "Serve failed ", err.Error()) return } log.NewInfo("0", "rpc conversation ok") }