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 { | type MessageSender interface { | ||||||
| 	SendMessage(servicePath, serviceMethod string, metadata map[string]string, data []byte) error | 	SendMessage(servicePath, serviceMethod string, metadata map[string]string, data []byte) error | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // rpcMsgSender sends messages using RPCX, for clients that support it | ||||||
| type rpcMsgSender struct { | type rpcMsgSender struct { | ||||||
| 	srv  *server.Server | 	srv  *server.Server | ||||||
| 	conn net.Conn | 	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 { | func (r *rpcMsgSender) SendMessage(servicePath, serviceMethod string, metadata map[string]string, data []byte) error { | ||||||
|  |  | ||||||
| 	return r.srv.SendMessage(r.conn, servicePath, serviceMethod, metadata, data) | 	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 { | type httpMsgSender struct { | ||||||
| 	url string | 	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 { | 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)) | 	req, err := http.NewRequest(http.MethodPost, h.url, bytes.NewReader(data)) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	// Set service path and method headers | ||||||
| 	req.Header.Set("X-RPCX-ServicePath", servicePath) | 	req.Header.Set("X-RPCX-ServicePath", servicePath) | ||||||
| 	req.Header.Set("X-RPCX-ServiceMethod", serviceMethod) | 	req.Header.Set("X-RPCX-ServiceMethod", serviceMethod) | ||||||
|  |  | ||||||
|  | 	// Create new URL query values | ||||||
| 	query := url.Values{} | 	query := url.Values{} | ||||||
|  | 	// Transfer values from metadata to query | ||||||
| 	for k, v := range metadata { | 	for k, v := range metadata { | ||||||
| 		query.Set(k, v) | 		query.Set(k, v) | ||||||
| 	} | 	} | ||||||
|  | 	// Set metadata header by encoding query values | ||||||
| 	req.Header.Set("X-RPCX-Meta", query.Encode()) | 	req.Header.Set("X-RPCX-Meta", query.Encode()) | ||||||
|  |  | ||||||
|  | 	// Perform request | ||||||
| 	res, err := http.DefaultClient.Do(req) | 	res, err := http.DefaultClient.Do(req) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  | 	// Close body | ||||||
| 	return res.Body.Close() | 	return res.Body.Close() | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user