Pārlūkot izejas kodu

Write frame at init.go

Refer init.go operations for understading other funcs
secure
kimsungho 4 gadus atpakaļ
vecāks
revīzija
5771ffce09
4 mainītis faili ar 104 papildinājumiem un 11 dzēšanām
  1. 3
    2
      main.go
  2. 92
    0
      modules/init.go
  3. 1
    1
      modules/message.go
  4. 8
    8
      modules/queue.go

+ 3
- 2
main.go Parādīt failu

@@ -1,7 +1,8 @@
1 1
 package main
2 2
 
3
-import "fmt"
3
+import "modules/Moscato_Messaging_Middleware/modules"
4 4
 
5 5
 func main() {
6
-	fmt.Printf("??")
6
+	moscato := modules.Moscato{}
7
+	moscato.Run()
7 8
 }

+ 92
- 0
modules/init.go Parādīt failu

@@ -1 +1,93 @@
1 1
 package modules
2
+
3
+import (
4
+	"errors"
5
+	"fmt"
6
+	"log"
7
+	"net"
8
+	"net/rpc"
9
+)
10
+
11
+//temporary type for matching manager
12
+type match_manager struct{}
13
+
14
+func (match_mng *match_manager) matching(queue *MsgQueue) {
15
+	//msg := queue.pop(true)
16
+	//Implement here ~~
17
+}
18
+
19
+func (match_mng *match_manager) add_subscription(msg MsgUnit) {
20
+
21
+}
22
+
23
+//temporary type for secure(key) manager
24
+type secure_manager struct{}
25
+
26
+type Moscato struct {
27
+	queue      MsgQueue
28
+	ms_mng     MStable
29
+	match_mng  match_manager
30
+	secure_mng secure_manager
31
+}
32
+
33
+// Send - rpc를 이용하여 msg전송
34
+func Send(ipaddr string, message MsgUnit) error {
35
+	return nil
36
+}
37
+
38
+// Recieve - rpc를 이용하여 msg전달 받음(rpc call)
39
+func (moscato *Moscato) Recieve(msg MsgUnit) (MsgUnit, error) {
40
+	msg_type := msg.CheckType()
41
+
42
+	//메세지 타입에 따라 다르게 처리
43
+	switch msg_type {
44
+
45
+	case KSM: //Key share msg
46
+
47
+	case PM: //Publish msg
48
+		moscato.queue.push(msg.(*PublishMsg))
49
+
50
+	case SM: //Subscription msg
51
+		moscato.match_mng.add_subscription(msg.(*SubscriptionMsg))
52
+
53
+	case RM: //Register msg
54
+		//var newmsg RegisterMsg
55
+		var newmsg = msg.(*RegisterMsg)
56
+		newNode := MSnode{newmsg.from, newmsg.from}
57
+		moscato.ms_mng.add_microservice(newNode)
58
+
59
+	case WM: //Withdraw msg
60
+		moscato.ms_mng.remove_microservice(msg.(*WithdrawMsg).from)
61
+
62
+	default:
63
+		return nil, errors.New("Message type Error: Not registered message type")
64
+	}
65
+
66
+	return msg, nil
67
+}
68
+
69
+func (moscato *Moscato) Run() {
70
+	//모스카토 구조체 변수 초기화
71
+	moscato.queue.queue_init()
72
+
73
+	//go routine -> matching 동작
74
+	go moscato.match_mng.matching(&moscato.queue)
75
+
76
+	//rpc 등록 -> Receive함수
77
+	rpc.Register(moscato)
78
+	moscato.Listen()
79
+}
80
+
81
+func (moscato *Moscato) Listen() {
82
+	l, err := net.Listen("tcp", fmt.Sprintf(":%v", 8160))
83
+
84
+	if err != nil {
85
+		log.Fatal(fmt.Sprintf("Unable to listen on given port: %s", err))
86
+	}
87
+	defer l.Close()
88
+
89
+	for {
90
+		conn, _ := l.Accept()
91
+		go rpc.ServeConn(conn)
92
+	}
93
+}

+ 1
- 1
modules/message.go Parādīt failu

@@ -42,7 +42,7 @@ type KeyGenMsg struct {
42 42
 //Key공유 메세지
43 43
 type KeyShareMsg struct {
44 44
 	Message
45
-	base32 string
45
+	key string
46 46
 }
47 47
 
48 48
 //전달할 내용을 담은 메세지

+ 8
- 8
modules/queue.go Parādīt failu

@@ -3,7 +3,7 @@ package modules
3 3
 import "errors"
4 4
 
5 5
 type MsgQueue struct {
6
-	queue     chan Message
6
+	queue     chan MsgUnit
7 7
 	QueueFunc QueueOperate
8 8
 }
9 9
 
@@ -20,29 +20,29 @@ func (mq *MsgQueue) queue_init() error {
20 20
 	if mq.queue != nil && len(mq.queue) != 0 {
21 21
 		return errors.New("Queue Hadlerer Error: Already initialized.")
22 22
 	} else if mq.queue == nil {
23
-		mq.queue = make(chan Message, 1000)
23
+		mq.queue = make(chan MsgUnit, 1000)
24 24
 		return nil
25 25
 	} else {
26 26
 		close(mq.queue)
27
-		mq.queue = make(chan Message)
27
+		mq.queue = make(chan MsgUnit)
28 28
 		return nil
29 29
 	}
30 30
 }
31 31
 
32
-func (mq *MsgQueue) push(msg Message) bool {
32
+func (mq *MsgQueue) push(msg MsgUnit) bool {
33 33
 	mq.queue <- msg
34 34
 	return true
35 35
 }
36 36
 
37
-func (mq *MsgQueue) pop(wait bool) (Message, error) {
37
+func (mq *MsgQueue) pop(wait bool) MsgUnit {
38 38
 	if wait == true {
39 39
 		if len(mq.queue) == 0 {
40
-			return Message{}, errors.New("Queue Handler Alert: Queue is Empty")
40
+			return nil
41 41
 		} else {
42
-			return <-mq.queue, nil
42
+			return <-mq.queue
43 43
 		}
44 44
 	} else {
45 45
 		//queue에 데이터가 들어올 때까지 block
46
-		return <-mq.queue, nil
46
+		return <-mq.queue
47 47
 	}
48 48
 }

Notiek ielāde…
Atcelt
Saglabāt