✨ 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 | ||||
|  | ||||
| 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/services" | ||||
| 	"git.solsynth.dev/hydrogen/dealer/pkg/proto" | ||||
| 	"github.com/gofiber/contrib/websocket" | ||||
| 	jsoniter "github.com/json-iterator/go" | ||||
| 	"github.com/rs/zerolog/log" | ||||
| 	"github.com/spf13/viper" | ||||
| ) | ||||
|  | ||||
| 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...") | ||||
|  | ||||
| 	// Event loop | ||||
| 	var mt int | ||||
| 	var data []byte | ||||
| 	var err error | ||||
|  | ||||
| 	var packet hyper.NetworkPackage | ||||
|  | ||||
| 	for { | ||||
| 		if _, _, err = c.ReadMessage(); err != nil { | ||||
| 		if mt, data, err = c.ReadMessage(); err != nil { | ||||
| 			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 | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
|  | ||||
| 	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"` | ||||
| 	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"` | ||||
| 	Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` | ||||
| } | ||||
|  | ||||
| func (x *StreamEventRequest) Reset() { | ||||
| @@ -342,6 +343,13 @@ func (x *StreamEventRequest) GetUserId() uint64 { | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (x *StreamEventRequest) GetPayload() []byte { | ||||
| 	if x != nil { | ||||
| 		return x.Payload | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type StreamEventResponse struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	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, | ||||
| 	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, | ||||
| 	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, | ||||
| 	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, | ||||
| 	0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x15, | ||||
| 	0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, | ||||
| 	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xcc, 0x02, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, | ||||
| 	0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x58, 0x0a, 0x15, 0x43, 0x6f, | ||||
| 	0x75, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, | ||||
| 	0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x75, 0x6e, | ||||
| 	0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, | ||||
| 	0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, | ||||
| 	0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, | ||||
| 	0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 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, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, | ||||
| 	0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x18, | ||||
| 	0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, | ||||
| 	0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, | ||||
| 	0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, | ||||
| 	0xcc, 0x02, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, | ||||
| 	0x6c, 0x6c, 0x65, 0x72, 0x12, 0x58, 0x0a, 0x15, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x72, | ||||
| 	0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, | ||||
| 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, | ||||
| 	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x70, | ||||
| 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, | ||||
| 	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, | ||||
| 	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, | ||||
| 	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0f, 0x50, 0x75, 0x73, | ||||
| 	0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x70, | ||||
| 	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, | ||||
| 	0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 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, 0x4a, 0x0a, 0x0f, 0x45, 0x6d, 0x69, 0x74, | ||||
| 	0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x72, | ||||
| 	0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, | ||||
| 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, | ||||
| 	0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 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, | ||||
| 	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 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, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, | ||||
| 	0x6d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, | ||||
| 	0x75, 0x73, 0x68, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, | ||||
| 	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 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, 0x4a, 0x0a, 0x0f, 0x45, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, | ||||
| 	0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, | ||||
| 	0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, | ||||
| 	0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, | ||||
| 	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 ( | ||||
|   | ||||
| @@ -38,6 +38,7 @@ message PushStreamResponse { | ||||
| message StreamEventRequest { | ||||
|   string event = 1; | ||||
|   uint64 user_id = 2; | ||||
|   bytes payload = 3; | ||||
| } | ||||
|  | ||||
| message StreamEventResponse { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user