jaehoon_kim 4 роки тому
джерело
коміт
450043e8c3
1 змінених файлів з 95 додано та 80 видалено
  1. 95
    80
      src/microservice/modules/init.go

+ 95
- 80
src/microservice/modules/init.go Переглянути файл

@@ -1,6 +1,8 @@
1 1
 package modules
2 2
 
3 3
 import (
4
+	"encoding/json"
5
+	"errors"
4 6
 	"fmt"
5 7
 	"log"
6 8
 	"net"
@@ -13,117 +15,130 @@ type Microservice struct {
13 15
 type Moscato struct {
14 16
 }
15 17
 
16
-type Reply struct {
17
-	receivemsg MsgUnit
18
+type Receiver struct{
19
+	microservice *Microservice
18 20
 }
19 21
 
20
-func (microservice *Microservice)MS_Receive(msg MsgUnit, reply *Reply)error{
21
-	go microservice.Receive(msg)
22
-	return nil
23
-}
24
-
25
-//Receive - MicroService가 msg 받음// MS.go들어가야할 함수
26
-func (microservice *Microservice)Receive(msg MsgUnit)error{
27
-	msg_type:=msg.CheckType()
28
-
29
-	switch msg_type{
30
-	case KGM://Key Gen Msg
31
-
32
-	case KSM://Key Share Msg
33
-
34
-	case SM://Subscription Msg
35
-
36
-	}
37
-	return nil
22
+type Reply struct {
23
+	CompleteLog string
38 24
 }
39 25
 
40
-func (microservice *Microservice) Send2MM(client *rpc.Client,msg MsgUnit) {
41
-	reply:=new(Reply)
42
-	err:=client.Call("Moscato.MM_Receive", msg,reply)
43
-	if err !=nil{
44
-		fmt.Println(err)
45
-		return
46
-	}
26
+type Args struct {
27
+	JsonMsg []byte
28
+	Kind int
47 29
 }
48 30
 
49
-func (microservice *Microservice) Listen() {
50
-	l, err := net.Listen("tcp", fmt.Sprintf(":%v", 8160))
31
+//MM에서 MS로 보냄 rpc call
32
+func (receiver Receiver)MsReceive(args Args, reply *Reply)error{
33
+	switch args.Kind{
34
+	case KGM://Key Gen Msg
35
+		var msg KeyGenMsg
36
+		err:=json.Unmarshal(args.JsonMsg,&msg)
37
+		if err != nil {
38
+			return err
39
+		}
40
+		go func() {
41
+			_, err := receiver.microservice.Receive(&msg)
42
+			if err != nil {
51 43
 
52
-	if err != nil {
53
-		log.Fatal(fmt.Sprintf("Unable to listen on given port: %s", err))
54
-	}
55
-	defer l.Close()
44
+			}
45
+		}()
46
+		reply.CompleteLog = "received completely"
56 47
 
57
-	for {
58
-		conn, _ := l.Accept()
59
-		go rpc.ServeConn(conn)
60
-	}
61
-}
48
+	case KSM://Key Share Msg
49
+		var msg KeyShareMsg
50
+		err:=json.Unmarshal(args.JsonMsg,&msg)
51
+		if err != nil {
52
+			return err
53
+		}
54
+		go func() {
55
+			_, err := receiver.microservice.Receive(&msg)
56
+			if err != nil {
62 57
 
58
+			}
59
+		}()
60
+		reply.CompleteLog = "received completely"
63 61
 
64
-func handleSum(ln net.Listener){
65
-	for {
66
-		conn, err := ln.Accept() // 클라이언트가 연결되면 TCP 연결을 리턴
62
+	case SM://Subscription Msg
63
+		var msg SubscriptionMsg
64
+		err:=json.Unmarshal(args.JsonMsg,&msg)
67 65
 		if err != nil {
68
-			continue
66
+			return err
69 67
 		}
70
-
71
-		defer func(conn net.Conn) {
72
-			err := conn.Close()
68
+		go func() {
69
+			_, err := receiver.microservice.Receive(&msg)
73 70
 			if err != nil {
74 71
 
75 72
 			}
76
-		}(conn)             // main 함수가 끝나기 직전에 TCP 연결을 닫음
77
-
78
-		go rpc.ServeConn(conn) // RPC를 처리하는 함수를 고루틴으로 실행
73
+		}()
74
+		reply.CompleteLog = "received completely"
75
+	default:
76
+		return errors.New("This msgtype is not appropriate")
79 77
 	}
78
+	return nil
80 79
 }
81 80
 
82
-func callRPC(client *rpc.Client, msg MsgUnit, err error){
83
-	reply := new(MsgUnit)
84
-	err = client.Call("Moscato.MM_Receive", msg, reply) // Calc.Sum 함수 호출
85
-	if err != nil {
86
-		fmt.Println(err)
87
-		return
81
+//Receive - MicroService가 msg 받음 MS.go들어가야할 함수
82
+func (microservice *Microservice)Receive(msg MsgUnit)(MsgUnit,error) {
83
+	msgType:=msg.CheckType()
84
+	switch msgType {
85
+	case KGM:
86
+		//KeyGen 일 때 할 행동
87
+	case KSM:
88
+		//KeyShare 일 때 할 행동
89
+	case SM:
90
+		//SubM 일 때 할 행동
88 91
 	}
92
+	return msg, nil
89 93
 }
90 94
 
91
-func (microservice *Microservice) Run() {
92
-	err := rpc.Register(new(Microservice))
93
-	if err != nil {
94
-		return
95
-	} // Calc 타입의 인스턴스를 생성하여 RPC 서버에 등록
96
-	ln, err := net.Listen("tcp", ":6000") // TCP 프로토콜에 6000번 포트로 연결을 받음 local 나중에 8150
97
-	ln1, err1 := net.Listen("tcp", ":6001") // TCP 프로토콜에 6000번 포트로 연결을 받음 나중에 8160
98
-
99
-	if err != nil {
95
+func (microservice *Microservice) Send2MM(ipaddress string,msg MsgUnit) {
96
+	client,err:=rpc.Dial("tcp",ipaddress+":8160")
97
+	if err!=nil{
100 98
 		fmt.Println(err)
101 99
 		return
102 100
 	}
103
-	if err1 != nil {
101
+	reply:=new(Reply)
102
+	jmsg,_:=msg.ConvertToJson()
103
+	args:=Args{
104
+		JsonMsg: jmsg,
105
+		Kind: msg.CheckType(),
106
+	}
107
+	err:=client.Call("receiver.MmReceive",args,reply)
108
+	if err !=nil{
104 109
 		fmt.Println(err)
105 110
 		return
106 111
 	}
107
-	defer func(ln net.Listener) {
108
-		err := ln.Close()
109
-		if err != nil {
112
+	fmt.Println(reply.CompleteLog)
113
+}
110 114
 
111
-		}
112
-	}(ln)             // main 함수가 종료되기 직전에 연결 대기를 닫음
113
-	defer func(ln1 net.Listener) {
114
-		err := ln1.Close()
115
-		if err != nil {
116 115
 
117
-		}
118
-	}(ln1) // main 함수가 종료되기 직전에 연결 대기를 닫음
119 116
 
120
-	/*client1, err := rpc.Dial("tcp", "127.0.0.1:6000") // RPC 서버에 연결
117
+func (microservice *Microservice) Run() {
118
+	receiver := Receiver{microservice:microservice}
119
+	//rpc 등록 -> Receive 함수
120
+	err := rpc.Register(receiver)
121 121
 	if err != nil {
122
-		fmt.Println(err)
122
+		log.Println(err)
123 123
 		return
124
-	}*/
124
+	}
125
+	Listen()
126
+	log.Println("listen complete.")
127
+	fmt.Scanln()
128
+}
129
+
130
+func Listen() {
131
+	//l, err := net.Listen("tcp", fmt.Sprintf(":%v", 8160))
132
+	//MS port : 8150
133
+	l, err := net.Listen("tcp", ":8150")//MS port
125 134
 
126
-	go handleSum(ln)
127
-	go handleSum(ln1)
128
-	fmt.Scanln() // main 함수가 종료되지 않도록 대기=
135
+	if err != nil {
136
+		log.Fatal(fmt.Sprintf("Unable to listen on given port: %s", err))
137
+	}
138
+	defer l.Close()
139
+
140
+	for {
141
+		conn, _ := l.Accept()
142
+		go rpc.ServeConn(conn)
143
+	}
129 144
 }

Завантаження…
Відмінити
Зберегти