forked from Elara6331/itd
		
	Add comments
This commit is contained in:
		
							
								
								
									
										13
									
								
								socket.go
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								socket.go
									
									
									
									
									
								
							| @@ -636,42 +636,53 @@ func getMsgSender(ctx context.Context, srv *server.Server) (MessageSender, bool) | ||||
|  | ||||
| } | ||||
|  | ||||
| // The MessageSender interface sends messages to the client | ||||
| type MessageSender interface { | ||||
| 	SendMessage(servicePath, serviceMethod string, metadata map[string]string, data []byte) error | ||||
| } | ||||
|  | ||||
| // rpcMsgSender sends messages using RPCX, for clients that support it | ||||
| type rpcMsgSender struct { | ||||
| 	srv  *server.Server | ||||
| 	conn net.Conn | ||||
| } | ||||
|  | ||||
| // SendMessage uses the server to send an RPCX message back to the client | ||||
| func (r *rpcMsgSender) SendMessage(servicePath, serviceMethod string, metadata map[string]string, data []byte) error { | ||||
|  | ||||
| 	return r.srv.SendMessage(r.conn, servicePath, serviceMethod, metadata, data) | ||||
| } | ||||
|  | ||||
| // httpMsgSender sends messages to the given return URL, for clients that provide it | ||||
| type httpMsgSender struct { | ||||
| 	url string | ||||
| } | ||||
|  | ||||
| // SendMessage uses HTTP to send a message back to the client | ||||
| func (h *httpMsgSender) SendMessage(servicePath, serviceMethod string, metadata map[string]string, data []byte) error { | ||||
| 	// Create new POST request with provided URL | ||||
| 	req, err := http.NewRequest(http.MethodPost, h.url, bytes.NewReader(data)) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// Set service path and method headers | ||||
| 	req.Header.Set("X-RPCX-ServicePath", servicePath) | ||||
| 	req.Header.Set("X-RPCX-ServiceMethod", serviceMethod) | ||||
|  | ||||
| 	// Create new URL query values | ||||
| 	query := url.Values{} | ||||
| 	// Transfer values from metadata to query | ||||
| 	for k, v := range metadata { | ||||
| 		query.Set(k, v) | ||||
| 	} | ||||
| 	// Set metadata header by encoding query values | ||||
| 	req.Header.Set("X-RPCX-Meta", query.Encode()) | ||||
|  | ||||
| 	// Perform request | ||||
| 	res, err := http.DefaultClient.Do(req) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	// Close body | ||||
| 	return res.Body.Close() | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user