✨ Able to handle websocket incoming packet
This commit is contained in:
		
							
								
								
									
										20
									
								
								pkg/hyper/network.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								pkg/hyper/network.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | package hyper | ||||||
|  |  | ||||||
|  | import jsoniter "github.com/json-iterator/go" | ||||||
|  |  | ||||||
|  | type NetworkPackage struct { | ||||||
|  | 	Action   string `json:"w"` | ||||||
|  | 	Endpoint string `json:"e,omitempty"` | ||||||
|  | 	Message  string `json:"m"` | ||||||
|  | 	Payload  any    `json:"p"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (v NetworkPackage) Marshal() []byte { | ||||||
|  | 	data, _ := jsoniter.Marshal(v) | ||||||
|  | 	return data | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (v NetworkPackage) RawPayload() []byte { | ||||||
|  | 	out, _ := jsoniter.Marshal(v.Payload) | ||||||
|  | 	return out | ||||||
|  | } | ||||||
| @@ -1,10 +1,17 @@ | |||||||
| package api | package api | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"fmt" | ||||||
|  | 	"git.solsynth.dev/hydrogen/dealer/pkg/hyper" | ||||||
|  | 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/directory" | ||||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/models" | 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/models" | ||||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/services" | 	"git.solsynth.dev/hydrogen/dealer/pkg/internal/services" | ||||||
|  | 	"git.solsynth.dev/hydrogen/dealer/pkg/proto" | ||||||
| 	"github.com/gofiber/contrib/websocket" | 	"github.com/gofiber/contrib/websocket" | ||||||
|  | 	jsoniter "github.com/json-iterator/go" | ||||||
| 	"github.com/rs/zerolog/log" | 	"github.com/rs/zerolog/log" | ||||||
|  | 	"github.com/spf13/viper" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func listenWebsocket(c *websocket.Conn) { | func listenWebsocket(c *websocket.Conn) { | ||||||
| @@ -15,11 +22,58 @@ func listenWebsocket(c *websocket.Conn) { | |||||||
| 	log.Debug().Uint("user", user.ID).Msg("New websocket connection established...") | 	log.Debug().Uint("user", user.ID).Msg("New websocket connection established...") | ||||||
|  |  | ||||||
| 	// Event loop | 	// Event loop | ||||||
|  | 	var mt int | ||||||
|  | 	var data []byte | ||||||
| 	var err error | 	var err error | ||||||
|  |  | ||||||
|  | 	var packet hyper.NetworkPackage | ||||||
|  |  | ||||||
| 	for { | 	for { | ||||||
| 		if _, _, err = c.ReadMessage(); err != nil { | 		if mt, data, err = c.ReadMessage(); err != nil { | ||||||
| 			break | 			break | ||||||
|  | 		} else if err := jsoniter.Unmarshal(data, &packet); err != nil { | ||||||
|  | 			_ = c.WriteMessage(mt, hyper.NetworkPackage{ | ||||||
|  | 				Action:  "error", | ||||||
|  | 				Message: "unable to unmarshal your command, requires json request", | ||||||
|  | 			}.Marshal()) | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		aliasingMap := viper.GetStringMapString("services.aliases") | ||||||
|  | 		if val, ok := aliasingMap[packet.Endpoint]; ok { | ||||||
|  | 			packet.Endpoint = val | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		service := directory.GetServiceInstanceByType(packet.Endpoint) | ||||||
|  | 		if service == nil { | ||||||
|  | 			_ = c.WriteMessage(mt, hyper.NetworkPackage{ | ||||||
|  | 				Action:  "error", | ||||||
|  | 				Message: "service not found", | ||||||
|  | 			}.Marshal()) | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		pc, err := service.GetGrpcConn() | ||||||
|  | 		if err != nil { | ||||||
|  | 			_ = c.WriteMessage(mt, hyper.NetworkPackage{ | ||||||
|  | 				Action:  "error", | ||||||
|  | 				Message: fmt.Sprintf("unable to connect to service: %v", err.Error()), | ||||||
|  | 			}.Marshal()) | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		sc := proto.NewStreamControllerClient(pc) | ||||||
|  | 		_, err = sc.EmitStreamEvent(context.Background(), &proto.StreamEventRequest{ | ||||||
|  | 			Event:   packet.Action, | ||||||
|  | 			UserId:  uint64(user.ID), | ||||||
|  | 			Payload: packet.RawPayload(), | ||||||
|  | 		}) | ||||||
|  |  | ||||||
|  | 		if err != nil { | ||||||
|  | 			_ = c.WriteMessage(mt, hyper.NetworkPackage{ | ||||||
|  | 				Action:  "error", | ||||||
|  | 				Message: fmt.Sprintf("unable send message to service: %v", err.Error()), | ||||||
|  | 			}.Marshal()) | ||||||
|  | 			continue | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -292,8 +292,9 @@ type StreamEventRequest struct { | |||||||
| 	sizeCache     protoimpl.SizeCache | 	sizeCache     protoimpl.SizeCache | ||||||
| 	unknownFields protoimpl.UnknownFields | 	unknownFields protoimpl.UnknownFields | ||||||
|  |  | ||||||
| 	Event  string `protobuf:"bytes,1,opt,name=event,proto3" json:"event,omitempty"` | 	Event   string `protobuf:"bytes,1,opt,name=event,proto3" json:"event,omitempty"` | ||||||
| 	UserId uint64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` | 	UserId  uint64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` | ||||||
|  | 	Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` | ||||||
| } | } | ||||||
|  |  | ||||||
| func (x *StreamEventRequest) Reset() { | func (x *StreamEventRequest) Reset() { | ||||||
| @@ -342,6 +343,13 @@ func (x *StreamEventRequest) GetUserId() uint64 { | |||||||
| 	return 0 | 	return 0 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (x *StreamEventRequest) GetPayload() []byte { | ||||||
|  | 	if x != nil { | ||||||
|  | 		return x.Payload | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
| type StreamEventResponse struct { | type StreamEventResponse struct { | ||||||
| 	state         protoimpl.MessageState | 	state         protoimpl.MessageState | ||||||
| 	sizeCache     protoimpl.SizeCache | 	sizeCache     protoimpl.SizeCache | ||||||
| @@ -407,35 +415,37 @@ var file_stream_proto_rawDesc = []byte{ | |||||||
| 	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, | 	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, | ||||||
| 	0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, | 	0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, | ||||||
| 	0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x61, | 	0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x66, 0x61, | ||||||
| 	0x69, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x43, 0x0a, 0x12, 0x53, 0x74, 0x72, | 	0x69, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x12, 0x53, 0x74, 0x72, | ||||||
| 	0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, | 	0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, | ||||||
| 	0x14, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, | 	0x14, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, | ||||||
| 	0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, | 	0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, | ||||||
| 	0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x15, | 	0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, | ||||||
| 	0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, | 	0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, | ||||||
| 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xcc, 0x02, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, | 	0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, | ||||||
| 	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x58, 0x0a, 0x15, 0x43, 0x6f, | 	0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, | ||||||
| 	0x75, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, | 	0xcc, 0x02, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, | ||||||
| 	0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x75, 0x6e, | 	0x6c, 0x6c, 0x65, 0x72, 0x12, 0x58, 0x0a, 0x15, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x72, | ||||||
| 	0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, | 	0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, | ||||||
| 	0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, | 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, | ||||||
| 	0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, | 	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, | ||||||
| 	0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, | 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, | ||||||
| 	0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x53, | 	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, | ||||||
| 	0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, | 	0x0a, 0x0a, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x18, 0x2e, 0x70, | ||||||
| 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, | 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, | ||||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0f, 0x50, 0x75, 0x73, | 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, | ||||||
| 	0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x70, | 	0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, | ||||||
| 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, | 	0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0f, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, | ||||||
| 	0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, | 	0x6d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, | ||||||
| 	0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, | 	0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, | ||||||
| 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0f, 0x45, 0x6d, 0x69, 0x74, | 	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x75, | ||||||
| 	0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x72, | 	0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, | ||||||
| 	0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, | 	0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0f, 0x45, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, | ||||||
| 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, | 	0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, | ||||||
| 	0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, | 	0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | ||||||
| 	0x73, 0x65, 0x22, 0x00, 0x42, 0x09, 0x5a, 0x07, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, | 	0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, | ||||||
| 	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | 	0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x09, | ||||||
|  | 	0x5a, 0x07, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||||
|  | 	0x33, | ||||||
| } | } | ||||||
|  |  | ||||||
| var ( | var ( | ||||||
|   | |||||||
| @@ -38,6 +38,7 @@ message PushStreamResponse { | |||||||
| message StreamEventRequest { | message StreamEventRequest { | ||||||
|   string event = 1; |   string event = 1; | ||||||
|   uint64 user_id = 2; |   uint64 user_id = 2; | ||||||
|  |   bytes payload = 3; | ||||||
| } | } | ||||||
|  |  | ||||||
| message StreamEventResponse { | message StreamEventResponse { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user