Skip to content

Commit f97565d

Browse files
committed
Implement sink address transfer from app to logic
1 parent a2b9051 commit f97565d

File tree

24 files changed

+242
-30
lines changed

24 files changed

+242
-30
lines changed

application/adapter/logic.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,21 @@ import (
99
type Logic struct {
1010
ID int `json:"id"`
1111
LogicName string `json:"logic_name"`
12-
Elems []Element `json:"elems"`
12+
Elems []Element `json:"elems"` // 엘렘 배열 , value time email 중 선택한거 드가있음
1313
SensorID int `json:"sensor_id"`
1414
Sensor model.Sensor `json:"sensor"`
1515
}
1616

17+
/*
18+
{
19+
"aid": int,
20+
"value": int,
21+
"sleep": int
22+
}
23+
*/
1724
type Element struct {
18-
Elem string `json:"elem"`
19-
Arg map[string]interface{} `json:"arg"`
25+
Elem string `json:"elem"` //value time email 중 선택한거
26+
Arg map[string]interface{} `json:"arg"` //거기에 맞는 Arg
2027
}
2128

2229
func LogicToAdapter(ml *model.Logic) (Logic, error) {

application/adapter/node.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,8 @@ type SensorPage struct {
6161
Sensors []model.Sensor `json:"sensors"`
6262
Pages int `json:"pages"`
6363
}
64+
65+
type SinkAddr struct {
66+
Sid int `json:"sid"`
67+
Addr string `json:"addr"`
68+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package model
2+
3+
/*
4+
액추에이터를 메모리에서 관리,
5+
엑추에이터에게 보낼 [val, time] 리스트 전송하면 이거 따라서 진행
6+
애플리케이션에서 바로 전송
7+
8+
싱크 추가할 때마다 싱크 주소 필요
9+
로직조건 만족 하면 모든 싱크들에게 액추에이터 실행 메세지 전송
10+
TCP받으면
11+
12+
*/
13+
14+
type Actuator struct {
15+
ID int `json:"id" gorm:"primaryKey"`
16+
Name string `json:"name" gorm:"type:varchar(32);unique;not null"`
17+
ActuatorValues []ActuatorValue `json:"actuator_values" gorm:"foreignKey:ActuatorID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
18+
Nodes []Node `json:"nodes" gorm:"many2many:has_actuators;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
19+
Logics []Logic `json:"logics" gorm:"foreignKey:ActuatorID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
20+
}
21+
22+
func (Actuator) TableName() string {
23+
return "actuator"
24+
}
25+
26+
type ActuatorValue struct {
27+
ActuatorID int `json:"sensor_id" gorm:"primaryKey"`
28+
ValueName string `json:"value_name" gorm:"primaryKey;type:varchar(32)"`
29+
Index int `json:"index" gorm:"not null"`
30+
}
31+
32+
func (ActuatorValue) TableName() string {
33+
return "actuator_values"
34+
}

application/domain/model/node.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ type Sink struct {
99
Nodes []Node `json:"nodes" gorm:"foreignKey:SinkID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
1010
}
1111

12+
1213
func (Sink) TableName() string {
1314
return "sinks"
1415
}

application/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func setRegistrationRoute(r *gin.Engine, h *handler.Handler) {
6666
{
6767
sink.GET("", h.ListSinks)
6868
sink.POST("", h.RegistSink)
69-
sink.DELETE("/:id", h.UnregistSink)
69+
sink.DELETE("/Satates:id", h.UnregistSink)
7070
}
7171
node := regist.Group("/node")
7272
{

application/rest/handler/regist.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,7 @@ func (h *Handler) ListSinks(c *gin.Context) {
4242
return
4343
} else {
4444
sinks, err := h.ru.GetSinks()
45-
if err != nil {
46-
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
47-
return
48-
}
49-
c.JSON(http.StatusOK, sinks)
45+
if err != nil {h.eu.CreateNodeEvent(&node)
5046
return
5147
}
5248
}
@@ -62,6 +58,7 @@ func (h *Handler) ListSinks(c *gin.Context) {
6258
// @Router /regist/sink [post]
6359
func (h *Handler) RegistSink(c *gin.Context) {
6460
var sink model.Sink
61+
6562
if err := c.ShouldBindJSON(&sink); err != nil {
6663
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
6764
return
@@ -71,6 +68,10 @@ func (h *Handler) RegistSink(c *gin.Context) {
7168
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
7269
return
7370
}
71+
72+
73+
74+
h.eu.CreateSinkEvent(&sink)
7475
c.JSON(http.StatusOK, sink)
7576
}
7677

@@ -102,7 +103,7 @@ func (h *Handler) UnregistSink(c *gin.Context) {
102103

103104
// ListNodes ...
104105
// @Summary List sensor node
105-
// @Description get nodes list
106+
// @Description get nodes listh.eu.CreateNodeEvent(&node)
106107
// @Tags node
107108
// @Param page query int false "page num"
108109
// @Param size query int false "page size(row)"
@@ -155,7 +156,7 @@ func (h *Handler) ListNodes(c *gin.Context) {
155156
}
156157

157158
}
158-
159+
h.eu.CreateNodeEvent(&node)
159160
// RegistNode ...
160161
// @Summary Add sensor node
161162
// @Description Add sensor node

application/usecase/eventUsecase/event.go

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package eventUsecase
33
import (
44
"sync"
55

6+
"github.com/KumKeeHyun/toiot/application/adapter"
67
"github.com/KumKeeHyun/toiot/application/domain/model"
78
)
89

@@ -35,15 +36,45 @@ func (eu *eventUsecase) DeleteSinkEvent(s *model.Sink) error {
3536
// var wg sync.WaitGroup
3637
// for _, l := range ll {
3738
// wg.Add(1)
38-
// go func() {
39-
// url := makeUrl(l.Addr, path)
40-
// eventClient.R().SetBody(s.Nodes).Post(url)
41-
// }()
42-
// }
43-
// wg.Wait()
39+
// go func() {func waitRespGroup(e EVENT, body interface{}, ll []model.LogicService) (prl []pingRequest) {
40+
var wg sync.WaitGroup
41+
for _, l := range ll {
42+
wg.Add(1)
43+
go func(_l model.LogicService) {
44+
url := makeUrl(_l.Addr, EventPath[e])
45+
resp, _ := eventClient.R().SetBody(body).Post(url)
46+
if !resp.IsSuccess() {
47+
prl = append(prl, pingRequest{_l, e, body})
48+
}
49+
wg.Done()
50+
}(l)
51+
}
52+
wg.Wait()
53+
return
54+
}
4455

4556
return nil
4657
}
58+
func (eu *eventUsecase) CreateSinkEvent(s *model.Sink) error {
59+
e := CreateSink
60+
sinkaddr := adapter.SinkAddr{
61+
Sid: s.ID,
62+
Addr: s.Addr,
63+
}
64+
65+
ll, err := eu.lsr.FindsByTopicID(s.Topic.ID)
66+
if err != nil {
67+
return err
68+
}
69+
eu.requestRetry = append(eu.requestRetry, waitRespGroup(e, sinkaddr, ll)...)
70+
71+
return nil
72+
}
73+
74+
75+
76+
77+
4778

4879
func (eu *eventUsecase) CreateNodeEvent(n *model.Node) error {
4980
e := CreateNode

application/usecase/eventUsecase/eventUsecase.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ type EVENT int
7474

7575
const (
7676
DeleteSink EVENT = iota
77+
CreateSink
7778
CreateNode
7879
DeleteNode
7980
DeleteSensor
@@ -83,6 +84,7 @@ const (
8384

8485
var EventPath = [...]string{
8586
"/event/sink/delete",
87+
"/event/sink/create",
8688
"/event/node/create",
8789
"/event/node/delete",
8890
"/event/sensor/delete",

application/usecase/usecase.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ type EventUsecase interface {
4545
RegistLogicService(l *model.LogicService) error
4646
CheckAndUnregistLogicServices() error
4747

48+
CreateSinkEvent(s *model.Sink) error
4849
DeleteSinkEvent(s *model.Sink) error
4950
CreateNodeEvent(n *model.Node) error
5051
DeleteNodeEvent(n *model.Node) error

docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ services:
3131
depends_on:
3232
- db
3333
links:
34-
- db
34+
- db
3535
ui:
3636
hostname: ui
3737
image: ksh24865/toiot-ui:0.0.1
@@ -65,7 +65,7 @@ services:
6565
- app
6666
links:
6767
- app
68-
68+
6969
health:
7070
hostname: health
7171
image: ksh24865/toiot-health:0.0.3

0 commit comments

Comments
 (0)