Parcourir la source

upload

master
jaehoon_kim il y a 3 ans
Parent
révision
32592eb65a
64 fichiers modifiés avec 65003 ajouts et 0 suppressions
  1. 8
    0
      .idea/.gitignore
  2. 9
    0
      .idea/Moscato_Client.iml
  3. 8
    0
      .idea/modules.xml
  4. 28
    0
      .idea/vcs.xml
  5. BIN
      bin/readme.exe
  6. BIN
      pkg/.DS_Store
  7. BIN
      pkg/darwin_amd64/.DS_Store
  8. BIN
      pkg/darwin_amd64/github.com/.DS_Store
  9. BIN
      pkg/darwin_amd64/github.com/fatih/color.a
  10. BIN
      pkg/windows_amd64/go.uber.org/zap.a
  11. BIN
      pkg/windows_amd64/go.uber.org/zap/benchmarks.a
  12. BIN
      pkg/windows_amd64/go.uber.org/zap/buffer.a
  13. BIN
      pkg/windows_amd64/go.uber.org/zap/internal.a
  14. BIN
      pkg/windows_amd64/go.uber.org/zap/internal/bufferpool.a
  15. BIN
      pkg/windows_amd64/go.uber.org/zap/internal/color.a
  16. BIN
      pkg/windows_amd64/go.uber.org/zap/internal/exit.a
  17. BIN
      pkg/windows_amd64/go.uber.org/zap/internal/ztest.a
  18. BIN
      pkg/windows_amd64/go.uber.org/zap/zapcore.a
  19. BIN
      pkg/windows_amd64/go.uber.org/zap/zapgrpc.a
  20. BIN
      pkg/windows_amd64/go.uber.org/zap/zapgrpc/internal/test.a
  21. BIN
      pkg/windows_amd64/go.uber.org/zap/zapio.a
  22. BIN
      pkg/windows_amd64/go.uber.org/zap/zaptest.a
  23. BIN
      pkg/windows_amd64/go.uber.org/zap/zaptest/observer.a
  24. BIN
      src/.DS_Store
  25. 36
    0
      src/example.json
  26. 29
    0
      src/getIpaddr.go
  27. BIN
      src/github.com/.DS_Store
  28. 1
    0
      src/github.com/apex/log
  29. 1
    0
      src/github.com/benbjohnson/clock
  30. 1
    0
      src/github.com/davecgh/go-spew
  31. 8
    0
      src/github.com/fatih/go.mod
  32. 8
    0
      src/github.com/fatih/go.sum
  33. BIN
      src/github.com/go-kit/.DS_Store
  34. 1
    0
      src/github.com/go-kit/log
  35. 1
    0
      src/github.com/go-logfmt/logfmt
  36. 1
    0
      src/github.com/go-stack/stack
  37. 1
    0
      src/github.com/mattn/go-colorable
  38. 1
    0
      src/github.com/mattn/go-isatty
  39. 1
    0
      src/github.com/pkg/errors
  40. 1
    0
      src/github.com/pmezard/go-difflib
  41. 1
    0
      src/github.com/rs/zerolog
  42. 1
    0
      src/github.com/sirupsen/logrus
  43. 1
    0
      src/github.com/stretchr/testify
  44. 1
    0
      src/go.uber.org/atomic
  45. 1
    0
      src/go.uber.org/goleak
  46. 1
    0
      src/go.uber.org/multierr
  47. 1
    0
      src/go.uber.org/zap
  48. BIN
      src/golang.org/.DS_Store
  49. BIN
      src/golang.org/x/.DS_Store
  50. 1
    0
      src/golang.org/x/sys
  51. 1
    0
      src/golang.org/x/term
  52. 1
    0
      src/google.golang.org/grpc
  53. BIN
      src/gopkg.in/.DS_Store
  54. 1
    0
      src/gopkg.in/inconshreveable/log15.v2
  55. 1
    0
      src/gopkg.in/yaml.v3
  56. 40
    0
      src/logConfig.go
  57. 617
    0
      src/main.go
  58. 50
    0
      src/parseJson_test.go
  59. 5
    0
      src/pubTimeLog.log
  60. 5
    0
      src/publish.txt
  61. 1
    0
      src/subTimeLog.log
  62. 1
    0
      src/subscription.txt
  63. 64087
    0
      src/test.log
  64. 41
    0
      test.log

+ 8
- 0
.idea/.gitignore Voir le fichier

@@ -0,0 +1,8 @@
1
+# Default ignored files
2
+/shelf/
3
+/workspace.xml
4
+# Datasource local storage ignored files
5
+/dataSources/
6
+/dataSources.local.xml
7
+# Editor-based HTTP Client requests
8
+/httpRequests/

+ 9
- 0
.idea/Moscato_Client.iml Voir le fichier

@@ -0,0 +1,9 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<module type="WEB_MODULE" version="4">
3
+  <component name="Go" enabled="true" />
4
+  <component name="NewModuleRootManager">
5
+    <content url="file://$MODULE_DIR$" />
6
+    <orderEntry type="inheritedJdk" />
7
+    <orderEntry type="sourceFolder" forTests="false" />
8
+  </component>
9
+</module>

+ 8
- 0
.idea/modules.xml Voir le fichier

@@ -0,0 +1,8 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="ProjectModuleManager">
4
+    <modules>
5
+      <module fileurl="file://$PROJECT_DIR$/.idea/Moscato_Client.iml" filepath="$PROJECT_DIR$/.idea/Moscato_Client.iml" />
6
+    </modules>
7
+  </component>
8
+</project>

+ 28
- 0
.idea/vcs.xml Voir le fichier

@@ -0,0 +1,28 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="VcsDirectoryMappings">
4
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+    <mapping directory="$PROJECT_DIR$/src/github.com/apex/log" vcs="Git" />
6
+    <mapping directory="$PROJECT_DIR$/src/github.com/benbjohnson/clock" vcs="Git" />
7
+    <mapping directory="$PROJECT_DIR$/src/github.com/davecgh/go-spew" vcs="Git" />
8
+    <mapping directory="$PROJECT_DIR$/src/github.com/go-kit/log" vcs="Git" />
9
+    <mapping directory="$PROJECT_DIR$/src/github.com/go-logfmt/logfmt" vcs="Git" />
10
+    <mapping directory="$PROJECT_DIR$/src/github.com/go-stack/stack" vcs="Git" />
11
+    <mapping directory="$PROJECT_DIR$/src/github.com/mattn/go-colorable" vcs="Git" />
12
+    <mapping directory="$PROJECT_DIR$/src/github.com/mattn/go-isatty" vcs="Git" />
13
+    <mapping directory="$PROJECT_DIR$/src/github.com/pkg/errors" vcs="Git" />
14
+    <mapping directory="$PROJECT_DIR$/src/github.com/pmezard/go-difflib" vcs="Git" />
15
+    <mapping directory="$PROJECT_DIR$/src/github.com/rs/zerolog" vcs="Git" />
16
+    <mapping directory="$PROJECT_DIR$/src/github.com/sirupsen/logrus" vcs="Git" />
17
+    <mapping directory="$PROJECT_DIR$/src/github.com/stretchr/testify" vcs="Git" />
18
+    <mapping directory="$PROJECT_DIR$/src/go.uber.org/atomic" vcs="Git" />
19
+    <mapping directory="$PROJECT_DIR$/src/go.uber.org/goleak" vcs="Git" />
20
+    <mapping directory="$PROJECT_DIR$/src/go.uber.org/multierr" vcs="Git" />
21
+    <mapping directory="$PROJECT_DIR$/src/go.uber.org/zap" vcs="Git" />
22
+    <mapping directory="$PROJECT_DIR$/src/golang.org/x/sys" vcs="Git" />
23
+    <mapping directory="$PROJECT_DIR$/src/golang.org/x/term" vcs="Git" />
24
+    <mapping directory="$PROJECT_DIR$/src/google.golang.org/grpc" vcs="Git" />
25
+    <mapping directory="$PROJECT_DIR$/src/gopkg.in/inconshreveable/log15.v2" vcs="Git" />
26
+    <mapping directory="$PROJECT_DIR$/src/gopkg.in/yaml.v3" vcs="Git" />
27
+  </component>
28
+</project>

BIN
bin/readme.exe Voir le fichier


BIN
pkg/.DS_Store Voir le fichier


BIN
pkg/darwin_amd64/.DS_Store Voir le fichier


BIN
pkg/darwin_amd64/github.com/.DS_Store Voir le fichier


BIN
pkg/darwin_amd64/github.com/fatih/color.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/benchmarks.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/buffer.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/internal.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/internal/bufferpool.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/internal/color.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/internal/exit.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/internal/ztest.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/zapcore.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/zapgrpc.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/zapgrpc/internal/test.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/zapio.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/zaptest.a Voir le fichier


BIN
pkg/windows_amd64/go.uber.org/zap/zaptest/observer.a Voir le fichier


BIN
src/.DS_Store Voir le fichier


+ 36
- 0
src/example.json Voir le fichier

@@ -0,0 +1,36 @@
1
+{
2
+  "||": [
3
+    {
4
+      "&&": [
5
+        {
6
+          "==": {
7
+            "attribute": "job",
8
+            "value": "doctor"
9
+          }
10
+        },
11
+        {
12
+          ">=": {
13
+            "attribute": "age",
14
+            "value": 40
15
+          }
16
+        }
17
+      ]
18
+    },
19
+    {
20
+      "&&" : [
21
+        {
22
+          "==": {
23
+          "attribute": "job",
24
+          "value": "programmer"
25
+          }
26
+        },
27
+        {
28
+          "<": {
29
+            "atrribute": "age",
30
+            "value": 30
31
+          }
32
+        }
33
+      ]
34
+    }
35
+  ]
36
+}

+ 29
- 0
src/getIpaddr.go Voir le fichier

@@ -0,0 +1,29 @@
1
+package main
2
+
3
+import (
4
+	"fmt"
5
+	"net"
6
+)
7
+
8
+func getCurrentIPAddr() string {
9
+	addrs, err := net.InterfaceAddrs()
10
+
11
+	if err != nil {
12
+		fmt.Println(err)
13
+	}
14
+
15
+	var currentIP string
16
+
17
+	for _, address := range addrs {
18
+
19
+		// check the address type and if it is not a loopback the display it
20
+		// = GET LOCAL IP ADDRESS
21
+		if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
22
+			if ipnet.IP.To4() != nil {
23
+				//fmt.Println("Current IP address : ", ipnet.IP.String())
24
+				currentIP = ipnet.IP.String()
25
+			}
26
+		}
27
+	}
28
+	return currentIP
29
+}

BIN
src/github.com/.DS_Store Voir le fichier


+ 1
- 0
src/github.com/apex/log

@@ -0,0 +1 @@
1
+Subproject commit 8da83152b5d6177b4bfe3d12810a5afd25355170

+ 1
- 0
src/github.com/benbjohnson/clock

@@ -0,0 +1 @@
1
+Subproject commit 68df829297d4f02d5997a02f8c0e8d4b12f0b2a3

+ 1
- 0
src/github.com/davecgh/go-spew

@@ -0,0 +1 @@
1
+Subproject commit d8f796af33cc11cb798c1aaeb27a4ebc5099927d

+ 8
- 0
src/github.com/fatih/go.mod Voir le fichier

@@ -0,0 +1,8 @@
1
+module github.com/fatih/color
2
+
3
+go 1.13
4
+
5
+require (
6
+	github.com/mattn/go-colorable v0.1.8
7
+	github.com/mattn/go-isatty v0.0.13
8
+)

+ 8
- 0
src/github.com/fatih/go.sum Voir le fichier

@@ -0,0 +1,8 @@
1
+github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
2
+github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
3
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
4
+github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA=
5
+github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
6
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
7
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8=
8
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

BIN
src/github.com/go-kit/.DS_Store Voir le fichier


+ 1
- 0
src/github.com/go-kit/log

@@ -0,0 +1 @@
1
+Subproject commit 0b69c7049332e99c25d5fd0f4d08317cfe45e7d8

+ 1
- 0
src/github.com/go-logfmt/logfmt

@@ -0,0 +1 @@
1
+Subproject commit 99455b83edb21b32a1f1c0a32f5001b77487b721

+ 1
- 0
src/github.com/go-stack/stack

@@ -0,0 +1 @@
1
+Subproject commit 93c7c7e3550c72bc91dead1452a0020142e2a902

+ 1
- 0
src/github.com/mattn/go-colorable

@@ -0,0 +1 @@
1
+Subproject commit 11a925cff3d38c293ddc8c05a16b504e3e2c63be

+ 1
- 0
src/github.com/mattn/go-isatty

@@ -0,0 +1 @@
1
+Subproject commit 13e91bf4058fb93d5629deb7b2e3763ec8f4fdf8

+ 1
- 0
src/github.com/pkg/errors

@@ -0,0 +1 @@
1
+Subproject commit 5dd12d0cfe7f152f80558d591504ce685299311e

+ 1
- 0
src/github.com/pmezard/go-difflib

@@ -0,0 +1 @@
1
+Subproject commit 5d4384ee4fb2527b0a1256a821ebfc92f91efefc

+ 1
- 0
src/github.com/rs/zerolog

@@ -0,0 +1 @@
1
+Subproject commit 3543e9d94bc5ed088dd2d9ad1d19c7ccd0fa65f5

+ 1
- 0
src/github.com/sirupsen/logrus

@@ -0,0 +1 @@
1
+Subproject commit f8bf7650dccb756cea26edaf9217aab85500fe07

+ 1
- 0
src/github.com/stretchr/testify

@@ -0,0 +1 @@
1
+Subproject commit 9acc22213e5fbec050904b9886c6df042188cad5

+ 1
- 0
src/go.uber.org/atomic

@@ -0,0 +1 @@
1
+Subproject commit 78a3b8ec6cb2e156b91140c7d53b16e12b7b3f91

+ 1
- 0
src/go.uber.org/goleak

@@ -0,0 +1 @@
1
+Subproject commit 3465299153df9a4883eb828ae8898fe06724ba39

+ 1
- 0
src/go.uber.org/multierr

@@ -0,0 +1 @@
1
+Subproject commit 39ca40c628bce6779c9725af600b737220b87602

+ 1
- 0
src/go.uber.org/zap

@@ -0,0 +1 @@
1
+Subproject commit a55bdc32f526699c3b4cc51a2cc97e944d02fbbf

BIN
src/golang.org/.DS_Store Voir le fichier


BIN
src/golang.org/x/.DS_Store Voir le fichier


+ 1
- 0
src/golang.org/x/sys

@@ -0,0 +1 @@
1
+Subproject commit 3b1fc93fc15c645820aa4a7d912e824f459ea1e3

+ 1
- 0
src/golang.org/x/term

@@ -0,0 +1 @@
1
+Subproject commit 97ca0e3821bf3a3cf6ea2441ece139e524802385

+ 1
- 0
src/google.golang.org/grpc

@@ -0,0 +1 @@
1
+Subproject commit f94594d587d5442778b970bccc478f347b51810f

BIN
src/gopkg.in/.DS_Store Voir le fichier


+ 1
- 0
src/gopkg.in/inconshreveable/log15.v2

@@ -0,0 +1 @@
1
+Subproject commit 5555550548196f43bf6dda2648158a72c416f9e7

+ 1
- 0
src/gopkg.in/yaml.v3

@@ -0,0 +1 @@
1
+Subproject commit f6f7691b1fdeb513f56608cd2c32c51f8194bf51

+ 40
- 0
src/logConfig.go Voir le fichier

@@ -0,0 +1,40 @@
1
+package main
2
+
3
+import (
4
+	"go.uber.org/zap"
5
+	"go.uber.org/zap/zapcore"
6
+)
7
+
8
+func MyEncoderConfig() zapcore.EncoderConfig {
9
+	return zapcore.EncoderConfig{
10
+		// Keys can be anything except the empty string.
11
+		TimeKey:  "T",
12
+		LevelKey: "L",
13
+		NameKey:  "N",
14
+		//CallerKey:      "C",
15
+		FunctionKey:    zapcore.OmitKey,
16
+		MessageKey:     "M",
17
+		//StacktraceKey:  "S",
18
+		LineEnding:     zapcore.DefaultLineEnding,
19
+		EncodeLevel:    zapcore.CapitalColorLevelEncoder,
20
+		EncodeTime:     zapcore.ISO8601TimeEncoder,
21
+		EncodeDuration: zapcore.StringDurationEncoder,
22
+		EncodeCaller:   zapcore.ShortCallerEncoder,
23
+	}
24
+}
25
+
26
+func NewMyLogger() *zap.Logger {
27
+	cfg := zap.Config{
28
+		Level:            zap.NewAtomicLevelAt(zap.DebugLevel),
29
+		Development:      true,
30
+		Encoding:         "console",
31
+		EncoderConfig:    MyEncoderConfig(),
32
+		OutputPaths:      []string{"stdout", "./test.log"},
33
+		ErrorOutputPaths: []string{"stderr"},
34
+	}
35
+	logger, err := cfg.Build()
36
+	if err != nil {
37
+		panic(err)
38
+	}
39
+	return logger
40
+}

+ 617
- 0
src/main.go Voir le fichier

@@ -0,0 +1,617 @@
1
+package main
2
+
3
+// TODO: 등록확인 되기 전에는 PM,SM 전송 불가하게 만들 것, 실행파일로 만든 후, AWS 이용해서 여러개 마이크로서비스 상태에서 테스트 해볼것
4
+
5
+import (
6
+	"bufio"
7
+	"encoding/json"
8
+	"errors"
9
+	"fmt"
10
+	"log"
11
+	"math/rand"
12
+	"net"
13
+	"net/rpc"
14
+	"os"
15
+	"os/signal"
16
+	"strconv"
17
+	"strings"
18
+	"syscall"
19
+	"time"
20
+	"unicode"
21
+)
22
+
23
+const (
24
+	KGM = 1 + iota
25
+	KSM
26
+	PM
27
+	SM
28
+	RM
29
+	WM
30
+)
31
+
32
+type Message struct {
33
+	From    string //ip 주소
34
+	Version string
35
+	Time    string
36
+	Kind    int //종류
37
+}
38
+
39
+type MsgUnit interface {
40
+	// ConvertToJson - send 전 json 형식으로 바꾸는 함수
41
+	ConvertToJson() ([]byte, error)
42
+	// CheckType - Message 의 타입을 알려줌
43
+	CheckType() int
44
+}
45
+
46
+type RegisterMsg struct {
47
+	Message
48
+	PrivateKey int64
49
+}
50
+
51
+type SubscriptionMsg struct {
52
+	Message
53
+	Topic    []int64  //대주제
54
+	Value    []int64  //피연산자
55
+	Operator []string //연산자
56
+	IsAlpha  bool     //value가 숫자인지 문자열인지
57
+}
58
+
59
+type PublishMsg struct {
60
+	Message
61
+	Topic   []int64 //대주제
62
+	Value   []int64 //Topic 의 세부적인 내용
63
+	Content []int64 // 내용
64
+}
65
+
66
+type WithdrawMsg struct {
67
+	Message
68
+}
69
+
70
+type Receiver struct {
71
+	thisNodeAddr string
72
+	microService MicroService
73
+}
74
+
75
+type MicroService struct {
76
+	ClientAddr string
77
+	PrivateKey int64
78
+	ShareKey   int64
79
+	// 메세지 미들웨어에 연결되어 있는가
80
+	IsConnected chan bool
81
+	MMAddress   string
82
+}
83
+
84
+func (receiver Receiver) Receive(args Args, reply *Reply) error {
85
+	switch args.Kind {
86
+
87
+	case KSM:
88
+		//var msg KeyShareMsg
89
+		//err := json.Unmarshal(args.JsonMsg, &msg)
90
+		//if err != nil {
91
+		//	return err
92
+		//}
93
+		//go func() {
94
+		//	_, err := receiver.moscato.Receive(msg)
95
+		//	if err != nil {
96
+		//
97
+		//	}
98
+		//}()
99
+		//reply.CompleteLog = "received completely"
100
+	case PM:
101
+		var msg PublishMsg
102
+		err := json.Unmarshal(args.JsonMsg, &msg)
103
+		if err != nil {
104
+			return err
105
+		}
106
+		go func() {
107
+			receiver.microService.Receive(msg)
108
+		}()
109
+		reply.CompleteLog = "[" + receiver.thisNodeAddr + "] : pubMsg received"
110
+		//var msg PublishMsg
111
+		//err := json.Unmarshal(args.JsonMsg, &msg)
112
+		//if err != nil {
113
+		//	return err
114
+		//}
115
+		//
116
+		//go func() {
117
+		//	_, err := receiver.moscato.Receive(msg)
118
+		//	if err != nil {
119
+		//
120
+		//	}
121
+		//}()
122
+		//reply.CompleteLog = "PM received completely"
123
+	case SM:
124
+		//var msg SubscriptionMsg
125
+		//err := json.Unmarshal(args.JsonMsg, &msg)
126
+		//if err != nil {
127
+		//	return err
128
+		//}
129
+		//go func() {
130
+		//	_, err := receiver.moscato.Receive(msg)
131
+		//	if err != nil {
132
+		//
133
+		//	}
134
+		//}()
135
+		//reply.CompleteLog = "received completely"
136
+	case RM:
137
+		var msg RegisterMsg
138
+		err := json.Unmarshal(args.JsonMsg, &msg)
139
+		if err != nil {
140
+			return err
141
+		}
142
+		go func() {
143
+			receiver.microService.Receive(msg)
144
+		}()
145
+		reply.CompleteLog = "[" + receiver.thisNodeAddr + "] : ackRM received"
146
+	case WM:
147
+		//var msg WithdrawMsg
148
+		//err := json.Unmarshal(args.JsonMsg, &msg)
149
+		//if err != nil {
150
+		//	return err
151
+		//}
152
+		//go func() {
153
+		//	_, err := receiver.moscato.Receive(msg)
154
+		//	if err != nil {
155
+		//
156
+		//	}
157
+		//}()
158
+		//reply.CompleteLog = "received completely"
159
+	default:
160
+		return errors.New("message type Error: Not registered message type")
161
+	}
162
+	//reply.CompleteLog = "received completely"
163
+	return nil
164
+}
165
+
166
+func (microService MicroService) Receive(msg MsgUnit) {
167
+	logger := NewMyLogger()
168
+	logger.Sync()
169
+
170
+	var msg_type = msg.CheckType()
171
+	//메세지 타입에 따라 다르게 처리
172
+	switch msg_type {
173
+
174
+	case KSM: //Key share msg
175
+
176
+	case PM: //Publish msg
177
+		//PM print
178
+		fmt.Println("----- received PM ------")
179
+		DecryptionMsg(msg.(PublishMsg), microService.ShareKey, microService.PrivateKey)
180
+		fmt.Println("------------------------")
181
+
182
+	case SM: //Subscription msg
183
+
184
+	case RM: //Register msg
185
+
186
+		microService.IsConnected <- true
187
+		logger.Info("MM Registered this node Complete!")
188
+
189
+	case WM: //Withdraw msg
190
+		//moscato.MicroServiceManager.RemoveMicroservice(msg.(*WithdrawMsg).From)
191
+
192
+	default:
193
+		errors.New("message type Error: Not registered message type")
194
+	}
195
+
196
+	return
197
+}
198
+
199
+func (msg SubscriptionMsg) ConvertToJson() ([]byte, error) {
200
+	js := msg
201
+	jsonBytes, err := json.Marshal(js)
202
+	return jsonBytes, err
203
+}
204
+
205
+func (msg PublishMsg) ConvertToJson() ([]byte, error) {
206
+	js := msg
207
+	jsonBytes, err := json.Marshal(js)
208
+	return jsonBytes, err
209
+}
210
+
211
+func (msg RegisterMsg) ConvertToJson() ([]byte, error) {
212
+	js := msg
213
+	jsonBytes, err := json.Marshal(js)
214
+	return jsonBytes, err
215
+}
216
+
217
+func (msg WithdrawMsg) ConvertToJson() ([]byte, error) {
218
+	js := msg
219
+	jsonBytes, err := json.Marshal(js)
220
+	return jsonBytes, err
221
+}
222
+
223
+func (msg Message) CheckType() int {
224
+	return msg.Kind
225
+}
226
+
227
+func CreatePubMsg(msg Message, topic string, value string, content string) PublishMsg {
228
+	//toPubMsg := new(PublishMsg)
229
+	//toPubMsg.Message = msg
230
+
231
+	intArr := []rune(topic)
232
+	//fmt.Print("Topic length ")
233
+	//fmt.Println(len(intArr))
234
+	//fmt.Println(len(toPubMsg.Topic))
235
+	var topicInt []int64
236
+	for index := 0; index < len(intArr); index++ {
237
+		//toPubMsg.Topic = append(toPubMsg.Topic, int64(intArr[index]))
238
+		topicInt = append(topicInt, int64(intArr[index]))
239
+	}
240
+	//fmt.Println(len(toPubMsg.Topic))
241
+
242
+	intArr = []rune(value)
243
+	var valueInt []int64
244
+	strInt64, _ := strconv.ParseInt(value, 10, 64)
245
+	if unicode.IsDigit(intArr[0]) {
246
+		valueInt = append(valueInt, strInt64)
247
+	} else {
248
+		for index := 0; index < len(intArr); index++ {
249
+			//toPubMsg.Value = append(toPubMsg.Value, int64(intArr[index]))
250
+			valueInt = append(valueInt, int64(intArr[index]))
251
+		}
252
+	}
253
+
254
+	intArr = []rune(content)
255
+	var contentInt []int64
256
+	for index := 0; index < len(intArr); index++ {
257
+		//toPubMsg.content = append(toPubMsg.content, int64(intArr[index]))
258
+		contentInt = append(contentInt, int64(intArr[index]))
259
+	}
260
+
261
+	return PublishMsg{msg, topicInt, valueInt, contentInt}
262
+}
263
+
264
+func CreateSubMsg(msg Message, topic string, value string, operator string, isAlpha bool) SubscriptionMsg {
265
+	//toPubMsg := new(PublishMsg)
266
+	//toPubMsg.Message = msg
267
+
268
+	intArr := []rune(topic)
269
+	//fmt.Print("Topic length ")
270
+	//fmt.Println(len(intArr))
271
+	//fmt.Println(len(toPubMsg.Topic))
272
+	var topicInt []int64
273
+	for index := 0; index < len(intArr); index++ {
274
+		//toPubMsg.Topic = append(toPubMsg.Topic, int64(intArr[index]))
275
+		topicInt = append(topicInt, int64(intArr[index]))
276
+	}
277
+	//fmt.Println(len(toPubMsg.Topic))
278
+	var valueInt []int64
279
+	if isAlpha {
280
+		intArr = []rune(value)
281
+
282
+		for index := 0; index < len(intArr); index++ {
283
+			//toPubMsg.Value = append(toPubMsg.Value, int64(intArr[index]))
284
+			valueInt = append(valueInt, int64(intArr[index]))
285
+		}
286
+	} else {
287
+		stringSlice := strings.Split(value, " ")
288
+		for index := 0; index < len(stringSlice); index++ {
289
+			strInt64, _ := strconv.ParseInt(stringSlice[index], 10, 64)
290
+			valueInt = append(valueInt, strInt64)
291
+		}
292
+	}
293
+	var operatorSlice []string
294
+	operatorSlice = strings.Split(operator, " ")
295
+
296
+	//intArr = []rune(content)
297
+	//var contentInt [] int64
298
+	//for index := 0; index < len(intArr); index++ {
299
+	//	//toPubMsg.content = append(toPubMsg.content, int64(intArr[index]))
300
+	//	contentInt = append(contentInt, int64(intArr[index]))
301
+	//}
302
+
303
+	return SubscriptionMsg{msg, topicInt, valueInt, operatorSlice, isAlpha}
304
+}
305
+
306
+type Args struct { // 매개변수
307
+	JsonMsg []byte
308
+	Kind    int
309
+}
310
+
311
+type Reply struct { // 리턴값
312
+	CompleteLog string
313
+}
314
+
315
+func generateRanUint64() uint64 {
316
+	rand.Seed(time.Now().UnixNano())
317
+	//return uint64(rand.Uint32())<<32 + uint64(rand.Uint32())
318
+	return uint64(0 + uint64(rand.Uint32()))
319
+}
320
+
321
+func main() {
322
+	logger := NewMyLogger()
323
+	logger.Sync()
324
+
325
+	var argu string
326
+	for _, v := range os.Args {
327
+		if strings.Index(v, "-mma") == 0 {
328
+			argu = strings.Replace(v, "-mma=", "", -1)
329
+			break
330
+		}
331
+	}
332
+	MMAddress := argu
333
+	if argu == "" {
334
+		logger.Fatal("there is no Message Middleware address")
335
+		return
336
+	}
337
+
338
+	args := new(Args)
339
+	reply := new(Reply)
340
+
341
+	currentIP := getCurrentIPAddr()
342
+	const debugPK = 12345
343
+	privateKey := int64(generateRanUint64())
344
+	shareKey := int64(9999)
345
+
346
+	microService := MicroService{currentIP, privateKey, shareKey, make(chan bool), MMAddress}
347
+	receiver := Receiver{thisNodeAddr: currentIP, microService: microService}
348
+
349
+	logger.Info("current machine address : " + currentIP + " / MM address : " + MMAddress)
350
+	logger.Debug("private key : " + strconv.FormatUint(uint64(privateKey), 10))
351
+
352
+	errReg := rpc.Register(receiver)
353
+	if errReg != nil {
354
+		log.Println(errReg)
355
+		return
356
+	}
357
+
358
+	client, err := rpc.Dial("tcp", microService.MMAddress+":8160") // RPC 서버에 연결
359
+	if err != nil {
360
+		logger.Fatal(err.Error())
361
+		return
362
+	}
363
+	defer client.Close() // main 함수가 끝나기 직전에 RPC 연결을 닫음
364
+
365
+	go Listen()
366
+
367
+	// Register 메세지 생성
368
+	message := Message{From: microService.ClientAddr, Version: "1", Time: "1", Kind: RM}
369
+	regMsg := RegisterMsg{message, microService.PrivateKey}
370
+	RJsonMsg, _ := regMsg.ConvertToJson()
371
+	args.JsonMsg = RJsonMsg
372
+	args.Kind = RM
373
+	err = client.Call("Receiver.MmReceive", args, reply)
374
+	logger.Info("RM sent")
375
+	if err != nil {
376
+		fmt.Println(err)
377
+		return
378
+	}
379
+	logger.Debug("[MM] " + reply.CompleteLog)
380
+
381
+	sigs := make(chan os.Signal, 1)
382
+	done := make(chan bool, 1)
383
+
384
+	signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
385
+
386
+	go func() {
387
+		sig := <-sigs
388
+		withDraw(message, client)
389
+		//fmt.Println(sig)
390
+		_ = sig
391
+		done <- true
392
+		fmt.Println("\nquit Moscato Successful and terminate microservice")
393
+		os.Exit(0)
394
+	}()
395
+
396
+	// 연결 되면 채널로 연결 확인이 되어야 다음 단계로 넘어감
397
+	checkConnect := <-microService.IsConnected
398
+	_ = checkConnect
399
+	fmt.Scanln()
400
+	logger.Info("sending Subscription messages")
401
+
402
+	/*
403
+		파일에서 subscription 읽어서 subscription 보내기
404
+		 **/
405
+	subFile, err := os.Open("subscription.txt")
406
+	if err != nil {
407
+		fmt.Println("sub")
408
+		log.Fatalf("Error when opening file: %s", err)
409
+	}
410
+	defer subFile.Close()
411
+	fileScanner := bufio.NewScanner(subFile)
412
+	var subscriptionText string
413
+	numSub := 0
414
+	file1, _ := os.Create("./subTimeLog.log")
415
+	defer file1.Close()
416
+	for fileScanner.Scan() {
417
+		subscriptionText = fileScanner.Text()
418
+		subscriptionTextSlice := strings.Split(subscriptionText, "/")
419
+		subTopic := subscriptionTextSlice[0]
420
+		subValue := subscriptionTextSlice[1]
421
+		subOperator := subscriptionTextSlice[2]
422
+		var subIsAlpha bool
423
+		if subscriptionTextSlice[3] == "true" {
424
+			subIsAlpha = true
425
+		} else if subscriptionTextSlice[3] == "false" {
426
+			subIsAlpha = false
427
+		} else {
428
+			println(numSub, "subscription isAlpha type error.")
429
+		}
430
+
431
+		numSub++
432
+		message = Message{From: microService.ClientAddr, Version: "1", Time: "1", Kind: SM}
433
+
434
+		// 메세지 생성시간 측정
435
+		subMakingStartTime := time.Now()
436
+
437
+		subMsg := CreateSubMsg(message, subTopic, subValue, subOperator, subIsAlpha)
438
+		logger.Debug("subMsg #" + strconv.Itoa(numSub) + " topic: " + subTopic + " / value: " + subValue + " / operator: " + subOperator)
439
+		logger.Debug("before enc subMsg #" + strconv.Itoa(numSub) + " topic: " + IntSlice2String(subMsg.Topic))
440
+
441
+		//subMsg := CreateSubMsg(message, "soccer", "player", "==", true)
442
+		//fmt.Println(pubMsg)
443
+		subMsg = EncryptionSubMsg(subMsg, microService.ShareKey, microService.PrivateKey)
444
+		logger.Debug("after enc subMsg #" + strconv.Itoa(numSub) + " topic: " + IntSlice2String(subMsg.Topic))
445
+		jsonMsg, _ := subMsg.ConvertToJson()
446
+		args.JsonMsg = jsonMsg
447
+		args.Kind = subMsg.Kind
448
+		//fmt.Println(subMsg)
449
+
450
+		//fmt.Println(string(args.JsonMsg))
451
+		subMakingElapsedTime := time.Since(subMakingStartTime)
452
+
453
+		// 메세지 생성 완료시간 측정
454
+		fmt.Printf("sub 생성시간: %d\n", subMakingElapsedTime.Nanoseconds())
455
+
456
+		fmt.Fprintln(file1, subMakingElapsedTime.Nanoseconds())
457
+
458
+		err = client.Call("Receiver.MmReceive", args, reply)
459
+		logger.Info("SM sent! #" + strconv.Itoa(numSub))
460
+
461
+		if err != nil {
462
+			fmt.Println(err)
463
+			return
464
+		}
465
+		//log.Println(reply.CompleteLog)
466
+		logger.Debug("[MM] " + reply.CompleteLog)
467
+
468
+	}
469
+
470
+	fmt.Scanln()
471
+	logger.Info("sending Publish messages")
472
+
473
+	pubFile, err := os.Open("publish.txt")
474
+	if err != nil {
475
+		log.Fatalf("Error when opening file: %s", err)
476
+	}
477
+	defer pubFile.Close()
478
+	fileScanner2 := bufio.NewScanner(pubFile)
479
+	var publishText string
480
+	numPub := 0
481
+	file2, _ := os.Create("./pubTimeLog.log")
482
+	defer file2.Close()
483
+
484
+	for fileScanner2.Scan() {
485
+		publishText = fileScanner2.Text()
486
+		publishTextSlice := strings.Split(publishText, "/")
487
+		//fmt.Println(publishTextSlice)
488
+		pubTopic := publishTextSlice[0]
489
+		pubValue := publishTextSlice[1]
490
+		pubContent := publishTextSlice[2]
491
+
492
+		numPub++
493
+		message = Message{From: microService.ClientAddr, Version: "1", Time: "1", Kind: PM}
494
+
495
+		pubMsg := CreatePubMsg(message, pubTopic, pubValue, pubContent)
496
+		logger.Debug("pubMsg #" + strconv.Itoa(numPub) + " topic: " + pubTopic + " / value: " + pubValue + " / content: " + pubContent)
497
+		logger.Debug("before enc pubMsg #" + strconv.Itoa(numPub) + " topic: " + IntSlice2String(pubMsg.Topic))
498
+
499
+		pubMakingStartTime := time.Now()
500
+		pubMsg = EncryptionPubMsg(pubMsg, microService.ShareKey, microService.PrivateKey)
501
+		pubMakingElapsedTime := time.Since(pubMakingStartTime)
502
+		fmt.Printf("pubMsg enc시간: %d\n\n", pubMakingElapsedTime.Nanoseconds())
503
+		fmt.Fprintln(file2,pubMakingElapsedTime.Nanoseconds())
504
+		logger.Debug("after enc pubMsg #" + strconv.Itoa(numPub) + " topic: " + IntSlice2String(pubMsg.Topic))
505
+		jsonMsg, _ := pubMsg.ConvertToJson()
506
+		args.JsonMsg = jsonMsg
507
+		args.Kind = pubMsg.Kind
508
+
509
+
510
+		err = client.Call("Receiver.MmReceive", args, reply)
511
+		logger.Info("PM sent! #" + strconv.Itoa(numPub))
512
+		if err != nil {
513
+			fmt.Println(err)
514
+			return
515
+		}
516
+
517
+		logger.Debug("[MM]: " + reply.CompleteLog)
518
+
519
+	}
520
+
521
+	<-done
522
+	return
523
+}
524
+
525
+func withDraw(msg Message, client *rpc.Client) {
526
+	msg.Kind = WM
527
+	wdMsg := WithdrawMsg{msg}
528
+	var args Args
529
+	args.JsonMsg, _ = wdMsg.ConvertToJson()
530
+	args.Kind = WM
531
+	var reply Reply
532
+	client.Call("Receiver.MmReceive", args, reply)
533
+}
534
+
535
+func EncryptionPubMsg(msg PublishMsg, gyKey int64, privateKey int64) PublishMsg {
536
+	for index := range msg.Topic {
537
+		msg.Topic[index] = msg.Topic[index] + gyKey + privateKey
538
+	}
539
+	for index := range msg.Value {
540
+		msg.Value[index] = msg.Value[index] + gyKey + privateKey
541
+	}
542
+	for index := range msg.Content {
543
+		msg.Content[index] = msg.Content[index] + gyKey + privateKey
544
+	}
545
+
546
+	return msg
547
+}
548
+
549
+func EncryptionSubMsg(msg SubscriptionMsg, gyKey int64, privateKey int64) SubscriptionMsg {
550
+	for index := range msg.Topic {
551
+		msg.Topic[index] = msg.Topic[index] + gyKey + privateKey
552
+	}
553
+	for index := range msg.Value {
554
+		msg.Value[index] = msg.Value[index] + gyKey + privateKey
555
+	}
556
+	return msg
557
+}
558
+
559
+func DecryptionMsg(msg PublishMsg, gyKey int64, privateKey int64) {
560
+	for index := range msg.Topic {
561
+		msg.Topic[index] = msg.Topic[index] - gyKey - privateKey
562
+	}
563
+	for index := range msg.Value {
564
+		msg.Value[index] = msg.Value[index] - gyKey - privateKey
565
+	}
566
+	for index := range msg.Content {
567
+		msg.Content[index] = msg.Content[index] - gyKey - privateKey
568
+	}
569
+
570
+	var runeArr []rune
571
+	for index := range msg.Topic {
572
+		runeArr = append(runeArr, rune(int(msg.Topic[index])))
573
+	}
574
+	fmt.Println("Topic is: " + string(runeArr))
575
+	runeArr = nil
576
+
577
+	for index := range msg.Value {
578
+		runeArr = append(runeArr, rune(int(msg.Value[index])))
579
+	}
580
+
581
+	if len(runeArr) == 1 {
582
+		fmt.Println("Value is: ", runeArr)
583
+	} else {
584
+		fmt.Println("Value is:", string(runeArr))
585
+	}
586
+
587
+	runeArr = nil
588
+
589
+	for index := range msg.Content {
590
+		runeArr = append(runeArr, rune(int(msg.Content[index])))
591
+	}
592
+	fmt.Println("Content is: " + string(runeArr))
593
+	runeArr = nil
594
+
595
+}
596
+
597
+func Listen() {
598
+	l, err1 := net.Listen("tcp", ":8150") //MM로 부터 받는거
599
+	if err1 != nil {
600
+		log.Fatal(fmt.Sprintf("Unable to listen on given port: %s", err1))
601
+	}
602
+	defer l.Close()
603
+
604
+	for {
605
+		conn, _ := l.Accept()
606
+		go rpc.ServeConn(conn)
607
+	}
608
+}
609
+
610
+func IntSlice2String(target []int64) string {
611
+	var targetString string
612
+	targetString = ""
613
+	for _, value := range target {
614
+		targetString += strconv.FormatInt(int64(value), 10) + " "
615
+	}
616
+	return targetString
617
+}

+ 50
- 0
src/parseJson_test.go Voir le fichier

@@ -0,0 +1,50 @@
1
+package main
2
+
3
+import (
4
+	"encoding/json"
5
+	"fmt"
6
+	"io/ioutil"
7
+	"testing"
8
+)
9
+
10
+func parseJson(dat []byte) {
11
+	data := make(map[string]interface{})
12
+	err := json.Unmarshal([]byte(dat), &data)
13
+	if err != nil {
14
+		fmt.Println(err)
15
+	}
16
+	traverseCheck(data)
17
+}
18
+
19
+
20
+func traverseCheck(el map[string]interface{}) {
21
+	for key, val := range el{
22
+		_ = val
23
+		if key == "==" || key == ">=" || key == "<=" || key == "<" || key == ">"{
24
+			//fmt.Println("****************")
25
+			tmpMap := el[key].(map[string]interface{})
26
+			fmt.Println(key)
27
+			for k, v := range tmpMap{
28
+				fmt.Println(k, v)
29
+			}
30
+			//fmt.Println("****************")
31
+
32
+		} else if key == "||" || key == "&&"{
33
+			tmpSlice := el[key].([]interface{})
34
+			fmt.Println(key)
35
+			for _, obj := range tmpSlice{
36
+				data := obj.(map[string]interface{})
37
+				traverseCheck(data)
38
+			}
39
+		}
40
+	}
41
+}
42
+
43
+func TestParseJson(t *testing.T) {
44
+
45
+	dat, err := ioutil.ReadFile("./example.json")
46
+	if err != nil {
47
+		fmt.Println(err)
48
+	}
49
+	parseJson(dat)
50
+}

+ 5
- 0
src/pubTimeLog.log Voir le fichier

@@ -0,0 +1,5 @@
1
+0
2
+0
3
+0
4
+0
5
+0

+ 5
- 0
src/publish.txt Voir le fichier

@@ -0,0 +1,5 @@
1
+Age/5/(0, 'Kimjaehoon', '161114-4124400', 'Female', 5, '2019-10-26', '03:10:59', '2019-10-26', 'Acanthosis nigricans', 'Kimsinhye')
2
+Age/5/(1, 'Kimseunghwan', '160209-3070094', 'Male', 5, '2016-07-29', '15:24:19', '2016-07-29', 'Achalasia', 'Dongjaejun')
3
+Age/1/(2, 'Kimyoung', '200922-4732062', 'Female', 1, '2012-07-21', '02:50:22', '2012-07-21', 'Achilles tendon rupture', 'Parkjaemin')
4
+Age/1/(3, 'Kimhwanwoo', '201219-3330932', 'Male', 1, '2014-05-30', '14:45:31', '2014-05-30', 'Acute coronary syndrome', 'Seoinho')
5
+Age/3/(4, 'Kimyebin', '180805-4826819', 'Female', 3, '2000-01-25', '19:15:34', '2000-01-25', 'Adenomyosis', 'Sondahye')

+ 1
- 0
src/subTimeLog.log Voir le fichier

@@ -0,0 +1 @@
1
+536000

+ 1
- 0
src/subscription.txt Voir le fichier

@@ -0,0 +1 @@
1
+Age/1/==/false

+ 64087
- 0
src/test.log
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


+ 41
- 0
test.log Voir le fichier

@@ -0,0 +1,41 @@
1
+2022-01-02T15:43:21.444+0900	INFO	current machine address : 192.168.0.77 / MM address : 127.0.0.1
2
+2022-01-02T15:43:21.445+0900	DEBUG	private key : 3547138460
3
+2022-01-02T15:43:21.447+0900	INFO	RM sent
4
+2022-01-02T15:43:21.447+0900	DEBUG	[MM] RM received
5
+2022-01-02T15:43:21.453+0900	INFO	MM Registered this node Complete!
6
+2022-01-02T15:46:14.173+0900	INFO	current machine address : 192.168.0.77 / MM address : 127.0.0.1
7
+2022-01-02T15:46:14.174+0900	DEBUG	private key : 1652718355
8
+2022-01-02T15:46:14.175+0900	INFO	RM sent
9
+2022-01-02T15:46:14.175+0900	DEBUG	[MM] RM received
10
+2022-01-02T15:46:14.181+0900	INFO	MM Registered this node Complete!
11
+2022-01-02T15:46:25.988+0900	INFO	sending Subscription messages
12
+2022-01-02T15:48:06.443+0900	INFO	current machine address : 192.168.0.77 / MM address : 127.0.0.1
13
+2022-01-02T15:48:06.443+0900	DEBUG	private key : 2580440694
14
+2022-01-02T15:48:06.445+0900	INFO	RM sent
15
+2022-01-02T15:48:06.445+0900	DEBUG	[MM] RM received
16
+2022-01-02T15:48:19.445+0900	INFO	current machine address : 192.168.0.77 / MM address : 127.0.0.1
17
+2022-01-02T15:48:19.445+0900	DEBUG	private key : 2861559125
18
+2022-01-02T15:48:19.448+0900	INFO	RM sent
19
+2022-01-02T15:48:19.452+0900	DEBUG	[MM] RM received
20
+2022-01-02T15:48:19.458+0900	INFO	MM Registered this node Complete!
21
+2022-01-02T15:48:22.290+0900	INFO	sending Subscription messages
22
+2022-01-02T15:59:46.422+0900	INFO	current machine address : 192.168.0.77 / MM address : 127.0.0.1
23
+2022-01-02T15:59:46.422+0900	DEBUG	private key : 1320653589
24
+2022-01-02T15:59:46.424+0900	INFO	RM sent
25
+2022-01-02T15:59:46.424+0900	DEBUG	[MM] RM received
26
+2022-01-02T15:59:46.437+0900	INFO	MM Registered this node Complete!
27
+2022-01-02T15:59:49.270+0900	INFO	sending Subscription messages
28
+2022-01-02T16:00:17.004+0900	INFO	current machine address : 192.168.0.77 / MM address : 127.0.0.1
29
+2022-01-02T16:00:17.005+0900	DEBUG	private key : 560452067
30
+2022-01-02T16:00:17.006+0900	INFO	RM sent
31
+2022-01-02T16:00:17.006+0900	DEBUG	[MM] RM received
32
+2022-01-02T16:00:29.424+0900	INFO	current machine address : 192.168.0.77 / MM address : 127.0.0.1
33
+2022-01-02T16:00:29.424+0900	DEBUG	private key : 213155866
34
+2022-01-02T16:00:29.426+0900	INFO	RM sent
35
+2022-01-02T16:00:29.426+0900	DEBUG	[MM] RM received
36
+2022-01-02T16:00:29.440+0900	INFO	MM Registered this node Complete!
37
+2022-01-02T16:00:32.131+0900	INFO	sending Subscription messages
38
+2022-01-02T16:08:17.494+0900	INFO	current machine address : 192.168.0.77 / MM address : 127.0.0.1
39
+2022-01-02T16:08:17.496+0900	INFO	RM sent
40
+2022-01-02T16:08:17.503+0900	INFO	MM Registered this node Complete!
41
+2022-01-02T16:08:20.647+0900	INFO	sending Subscription messages

Chargement…
Annuler
Enregistrer