Guest User

Untitled

a guest
Nov 19th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "flag"
  6. "strings"
  7. "github.com/golang/protobuf/proto"
  8. "probuf"
  9. "net"
  10. "io/ioutil"
  11.  
  12. )
  13.  
  14.  
  15.  
  16. func main() {
  17.  
  18. test := &probuf.Car{
  19. CarMake: proto.String("Isuzu"),
  20. CarModel: proto.String("trooper"),
  21. }
  22. data , _ := proto.Marshal(test)
  23. fmt.Println("program starting")
  24. fmt.Println(data)
  25.  
  26. newdata := &probuf.Car{}
  27. proto.Unmarshal(data, newdata)
  28.  
  29. fmt.Println(newdata)
  30.  
  31. server := flag.String("server", "yes", "-server yes create rpc server | -server no create rpc client")
  32. flag.Parse()
  33.  
  34. switch strings.ToLower(*server){
  35. case "yes" :
  36. rpcServer()
  37. case "no" :
  38. rpcClient()
  39. default:
  40. fmt.Println("must user server flag")
  41. }
  42.  
  43. }
  44.  
  45. func rpcServer(){
  46. l, err := net.Listen("tcp", ":8000")
  47. if err != nil {
  48. panic("server failed")
  49. }
  50. for {
  51. fmt.Println("server running")
  52. c, err := l.Accept()
  53. if err != nil {
  54. panic("no request accepter")
  55. }
  56. defer l.Close()
  57.  
  58. go func(c net.Conn){
  59. defer c.Close()
  60.  
  61. data, err := ioutil.ReadAll(c)
  62. if err != nil {
  63. panic("read error")
  64. }
  65. a := &probuf.Car{}
  66. proto.Unmarshal(data, a)
  67. fmt.Println(a)
  68.  
  69. }(c)
  70. }
  71.  
  72. }
  73.  
  74. func rpcClient(){
  75. fmt.Println("rpc client running")
  76. jeep := &probuf.Car{
  77. CarMake: proto.String("jeep"),
  78. CarModel: proto.String("cherokee"),
  79. }
  80.  
  81. data, _ := proto.Marshal(jeep)
  82.  
  83. transferData(data)
  84.  
  85. }
  86.  
  87. func transferData(data []byte){
  88. c, err := net.Dial("tcp","127.0.0.1:8000")
  89. if err != nil {
  90. panic("could not write data")
  91. }
  92. defer c.Close()
  93. c.Write(data)
  94. }
  95.  
  96. //protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/addressbook.proto
Add Comment
Please, Sign In to add comment