Please help me resolving this error. My app was working fine till 22 august. i have upgraded to v3 but still i am not able to resolve this error. please tell me what i have to change in this file so that it starts working.
My MarketFeederClient is :-
public class {
public interface MarketDataListener {
void onMarketDataReceived(String data);
}
private final MarketDataListener listener;
private final Context context;
private WebSocketClient client;
public MarketFeederClient(Context context, String accessToken, MarketDataListener listener) {
this.listener = listener;
this.context = context;
connectToMarketFeed(accessToken);
}
private void connectToMarketFeed(String accessToken) {
new Thread(() -> {
try {
// Close any existing WebSocket connection
if (client != null && client.isOpen()) {
try {
client.closeBlocking();
} catch (Exception ignore) {
}
client = null;
}
// Authenticate and get a fresh one-time WebSocket URI
ApiClient authenticatedClient = authenticateApiClient(accessToken);
URI serverUri = getFreshAuthorizedWebSocketUri(authenticatedClient);
Log.d("MarketFeederClient", "Fresh WS URI: " + serverUri);
// Create and connect new WebSocket
client = createWebSocketClient(serverUri);
client.connectBlocking(); // Ensure connection completes
} catch (Exception e) {
Log.e("MarketFeederClient", "Error connecting to feed", e);
}
}).start();
}
public void close() {
if (client != null && client.isOpen()) {
try {
client.closeBlocking();
} catch (Exception e) {
e.printStackTrace();
}
client = null;
}
}
private ApiClient authenticateApiClient(String upstoxToken) {
ApiClient defaultClient = Configuration.getDefaultApiClient();
OAuth oAuth = (OAuth) defaultClient.getAuthentication("OAUTH2");
oAuth.setAccessToken(upstoxToken);
return defaultClient;
}
private URI getFreshAuthorizedWebSocketUri(ApiClient authenticatedClient) throws ApiException {
WebsocketApi websocketApi = new WebsocketApi(authenticatedClient);
WebsocketAuthRedirectResponse response = websocketApi.getMarketDataFeedAuthorize("3.0"); // V3 endpoint
return URI.create(response.getData().getAuthorizedRedirectUri());
}
private WebSocketClient createWebSocketClient(URI serverUri) {
return new WebSocketClient(serverUri) {
@Override
public void onOpen(ServerHandshake handshakedata) {
Log.d("MarketFeederClient", "WebSocket Opened");
sendSubscriptionRequest(this);
}
@Override
public void onMessage(String message) {
if (listener != null) listener.onMarketDataReceived(message);
}
@Override
public void onMessage(ByteBuffer bytes) {
handleBinaryMessage(bytes);
}
@Override
public void onClose(int code, String reason, boolean remote) {
if (listener != null)
listener.onMarketDataReceived("Connection closed: " + reason);
}
@Override
public void onError(Exception ex) {
Log.e("MarketFeederClient", "WebSocket Error", ex);
}
};
}
private void sendSubscriptionRequest(WebSocketClient client) {
JsonObject requestObject = constructSubscriptionRequest();
client.send(requestObject.toString().getBytes(StandardCharsets.UTF_8));
}
private JsonObject constructSubscriptionRequest() {
JsonObject dataObject = new JsonObject();
dataObject.addProperty("mode", "full");
List<String> instrumentKeys = new ArrayList<>();
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
String callKey = sharedPreferences.getString(KEY_CALL_KEY, "");
String putKey = sharedPreferences.getString(KEY_PUT_KEY, "");
if (!callKey.isEmpty()) instrumentKeys.add(callKey);
if (!putKey.isEmpty()) instrumentKeys.add(putKey);
Log.d("MarketFeederClient", "callKey: " + callKey);
Log.d("MarketFeederClient", "putKey: " + putKey);
// Always include Nifty 50
instrumentKeys.add("NSE_INDEX|Nifty 50");
JsonArray instrumentKeysArray = new Gson().toJsonTree(instrumentKeys).getAsJsonArray();
dataObject.add("instrumentKeys", instrumentKeysArray);
JsonObject mainObject = new JsonObject();
mainObject.addProperty("guid", UUID.randomUUID().toString());
mainObject.addProperty("method", "sub");
mainObject.add("data", dataObject);
return mainObject;
}
private void handleBinaryMessage(ByteBuffer bytes) {
try {
MarketDataFeed.FeedResponse feedResponse = MarketDataFeed.FeedResponse.parseFrom(bytes.array());
String jsonFormat = JsonFormat.printer().print(feedResponse);
if (listener != null) listener.onMarketDataReceived(jsonFormat);
} catch (InvalidProtocolBufferException e) {
Log.e("MarketFeederClient", "Binary parse error", e);
}
}
}
and it keeps showing this error.
2025-08-28 07:02:08.627 MarketFeederClient com.devdroid.realtime
Error connecting to feed (Ask Gemini)
com.upstox.ApiException: Gone
at com.upstox.ApiClient.handleResponse(ApiClient.java:936)
at com.upstox.ApiClient.execute(ApiClient.java:852)
at io.swagger.client.api.WebsocketApi.getMarketDataFeedAuthorizeWithHttpInfo(WebsocketApi.java:295)
at io.swagger.client.api.WebsocketApi.getMarketDataFeedAuthorize(WebsocketApi.java:281)
at com.devdroid.realtime.upstox.MarketFeederClient.getFreshAuthorizedWebSocketUri(MarketFeederClient.java:101)
at com.devdroid.realtime.upstox.MarketFeederClient.lambda$connectToMarketFeed$0$com-devdroid-realtime-upstox-MarketFeederClient(MarketFeederClient.java:68)
at com.devdroid.realtime.upstox.MarketFeederClient$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at java.lang.Thread.run(Thread.java:1012)