@@ -58,7 +58,26 @@ public void sendMessage(Message request, ClientCallContext context) throws A2ACl
5858 .metadata (clientConfig .getMetadata ())
5959 .build ();
6060
61- sendMessage (messageSendParams , context );
61+ sendMessage (messageSendParams , null , null , context );
62+ }
63+
64+ @ Override
65+ public void sendMessage (Message request , List <BiConsumer <ClientEvent , AgentCard >> consumers ,
66+ Consumer <Throwable > streamingErrorHandler , ClientCallContext context ) throws A2AClientException {
67+ MessageSendConfiguration messageSendConfiguration = new MessageSendConfiguration .Builder ()
68+ .acceptedOutputModes (clientConfig .getAcceptedOutputModes ())
69+ .blocking (clientConfig .isPolling ())
70+ .historyLength (clientConfig .getHistoryLength ())
71+ .pushNotification (clientConfig .getPushNotificationConfig ())
72+ .build ();
73+
74+ MessageSendParams messageSendParams = new MessageSendParams .Builder ()
75+ .message (request )
76+ .configuration (messageSendConfiguration )
77+ .metadata (clientConfig .getMetadata ())
78+ .build ();
79+
80+ sendMessage (messageSendParams , consumers , streamingErrorHandler , context );
6281 }
6382
6483 @ Override
@@ -77,7 +96,7 @@ public void sendMessage(Message request, PushNotificationConfig pushNotification
7796 .metadata (metatadata )
7897 .build ();
7998
80- sendMessage (messageSendParams , context );
99+ sendMessage (messageSendParams , null , null , context );
81100 }
82101
83102 @ Override
@@ -116,19 +135,13 @@ public void deleteTaskPushNotificationConfigurations(
116135
117136 @ Override
118137 public void resubscribe (TaskIdParams request , ClientCallContext context ) throws A2AClientException {
119- if (! clientConfig .isStreaming () || ! agentCard .capabilities ().streaming ()) {
120- throw new A2AClientException ("Client and/or server does not support resubscription" );
121- }
122- ClientTaskManager tracker = new ClientTaskManager ();
123- Consumer <StreamingEventKind > eventHandler = event -> {
124- try {
125- ClientEvent clientEvent = getClientEvent (event , tracker );
126- consume (clientEvent , agentCard );
127- } catch (A2AClientError e ) {
128- getStreamingErrorHandler ().accept (e );
129- }
130- };
131- clientTransport .resubscribe (request , eventHandler , getStreamingErrorHandler (), context );
138+ resubscribeToTask (request , null , null , context );
139+ }
140+
141+ @ Override
142+ public void resubscribe (TaskIdParams request , List <BiConsumer <ClientEvent , AgentCard >> consumers ,
143+ Consumer <Throwable > streamingErrorHandler , ClientCallContext context ) throws A2AClientException {
144+ resubscribeToTask (request , consumers , streamingErrorHandler , context );
132145 }
133146
134147 @ Override
@@ -159,7 +172,8 @@ private ClientEvent getClientEvent(StreamingEventKind event, ClientTaskManager t
159172 }
160173 }
161174
162- private void sendMessage (MessageSendParams messageSendParams , ClientCallContext context ) throws A2AClientException {
175+ private void sendMessage (MessageSendParams messageSendParams , List <BiConsumer <ClientEvent , AgentCard >> consumers ,
176+ Consumer <Throwable > errorHandler , ClientCallContext context ) throws A2AClientException {
163177 if (! clientConfig .isStreaming () || ! agentCard .capabilities ().streaming ()) {
164178 EventKind eventKind = clientTransport .sendMessage (messageSendParams , context );
165179 ClientEvent clientEvent ;
@@ -169,18 +183,61 @@ private void sendMessage(MessageSendParams messageSendParams, ClientCallContext
169183 // must be a message
170184 clientEvent = new MessageEvent ((Message ) eventKind );
171185 }
172- consume (clientEvent , agentCard );
186+ consume (clientEvent , agentCard , consumers );
173187 } else {
174188 ClientTaskManager tracker = new ClientTaskManager ();
189+ Consumer <Throwable > overriddenErrorHandler = getOverriddenErrorHandler (errorHandler );
175190 Consumer <StreamingEventKind > eventHandler = event -> {
176191 try {
177192 ClientEvent clientEvent = getClientEvent (event , tracker );
178- consume (clientEvent , agentCard );
193+ consume (clientEvent , agentCard , consumers );
179194 } catch (A2AClientError e ) {
180- getStreamingErrorHandler () .accept (e );
195+ overriddenErrorHandler .accept (e );
181196 }
182197 };
183- clientTransport .sendMessageStreaming (messageSendParams , eventHandler , getStreamingErrorHandler (), context );
198+ clientTransport .sendMessageStreaming (messageSendParams , eventHandler , overriddenErrorHandler , context );
199+ }
200+ }
201+
202+ private void resubscribeToTask (TaskIdParams request , List <BiConsumer <ClientEvent , AgentCard >> consumers ,
203+ Consumer <Throwable > errorHandler , ClientCallContext context ) throws A2AClientException {
204+ if (! clientConfig .isStreaming () || ! agentCard .capabilities ().streaming ()) {
205+ throw new A2AClientException ("Client and/or server does not support resubscription" );
206+ }
207+ ClientTaskManager tracker = new ClientTaskManager ();
208+ Consumer <Throwable > overriddenErrorHandler = getOverriddenErrorHandler (errorHandler );
209+ Consumer <StreamingEventKind > eventHandler = event -> {
210+ try {
211+ ClientEvent clientEvent = getClientEvent (event , tracker );
212+ consume (clientEvent , agentCard , consumers );
213+ } catch (A2AClientError e ) {
214+ overriddenErrorHandler .accept (e );
215+ }
216+ };
217+ clientTransport .resubscribe (request , eventHandler , overriddenErrorHandler , context );
218+ }
219+
220+ private Consumer <Throwable > getOverriddenErrorHandler (Consumer <Throwable > errorHandler ) {
221+ return e -> {
222+ if (errorHandler != null ) {
223+ errorHandler .accept (e );
224+ } else {
225+ if (getStreamingErrorHandler () != null ) {
226+ getStreamingErrorHandler ().accept (e );
227+ }
228+ }
229+ };
230+ }
231+
232+ private void consume (ClientEvent clientEvent , AgentCard agentCard , List <BiConsumer <ClientEvent , AgentCard >> consumers ) {
233+ if (consumers != null ) {
234+ // use specified consumers
235+ for (BiConsumer <ClientEvent , AgentCard > consumer : consumers ) {
236+ consumer .accept (clientEvent , agentCard );
237+ }
238+ } else {
239+ // use configured consumers
240+ consume (clientEvent , agentCard );
184241 }
185242 }
186243}
0 commit comments