@Override public AckArgs readAckArgs(ByteBufInputStream src, AckCallback<?> callback) throws IOException { try { return delegate.readAckArgs(src, callback); } catch (Exception e) { src.reset(); log.error("Can't read ack args: " + src.readLine() + " for type: " + callback.getResultClass(), e); throw new IOException(e); } }
private void scheduleTimeout(final long index, final UUID sessionId, AckCallback<?> callback) { if (callback.getTimeout() == -1) { return; } SchedulerKey key = new AckSchedulerKey(Type.ACK_TIMEOUT, sessionId, index); scheduler.scheduleCallback(key, new Runnable() { @Override public void run() { AckCallback<?> cb = removeCallback(sessionId, index); if (cb != null) { cb.onTimeout(); } } }, callback.getTimeout(), TimeUnit.SECONDS); }
@Override public void run() { AckCallback<?> cb = removeCallback(sessionId, index); if (cb != null) { cb.onTimeout(); } } }, callback.getTimeout(), TimeUnit.SECONDS);
@SuppressWarnings("unchecked") public void onAck(SocketIOClient client, Packet packet) { AckSchedulerKey key = new AckSchedulerKey(Type.ACK_TIMEOUT, client.getSessionId(), packet.getAckId()); scheduler.cancel(key); AckCallback callback = removeCallback(client.getSessionId(), packet.getAckId()); if (callback == null) { return; } if (callback instanceof MultiTypeAckCallback) { callback.onSuccess(new MultiTypeArgs(packet.<List<Object>>getData())); } else { Object param = null; List<Object> args = packet.getData(); if (!args.isEmpty()) { param = args.get(0); } if (args.size() > 1) { log.error("Wrong ack args amount. Should be only one argument, but current amount is: {}. Ack id: {}, sessionId: {}", args.size(), packet.getAckId(), client.getSessionId()); } callback.onSuccess(param); } }
@SuppressWarnings("unchecked") public void onAck(SocketIOClient client, Packet packet) { AckSchedulerKey key = new AckSchedulerKey(Type.ACK_TIMEOUT, client.getSessionId(), packet.getAckId()); scheduler.cancel(key); AckCallback callback = removeCallback(client.getSessionId(), packet.getAckId()); if (callback == null) { return; } if (callback instanceof MultiTypeAckCallback) { callback.onSuccess(new MultiTypeArgs(packet.<List<Object>>getData())); } else { Object param = null; List<Object> args = packet.getData(); if (!args.isEmpty()) { param = args.get(0); } if (args.size() > 1) { log.error("Wrong ack args amount. Should be only one argument, but current amount is: {}. Ack id: {}, sessionId: {}", args.size(), packet.getAckId(), client.getSessionId()); } callback.onSuccess(param); } }
@Override public void onDisconnect(ClientHead client) { AckEntry e = ackEntries.remove(client.getSessionId()); if (e == null) { return; } Set<Long> indexes = e.getAckIndexes(); for (Long index : indexes) { AckCallback<?> callback = e.getAckCallback(index); if (callback != null) { callback.onTimeout(); } SchedulerKey key = new AckSchedulerKey(Type.ACK_TIMEOUT, client.getSessionId(), index); scheduler.cancel(key); } }
@Override public AckArgs deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { List<Object> args = new ArrayList<Object>(); AckArgs result = new AckArgs(args); ObjectMapper mapper = (ObjectMapper) jp.getCodec(); JsonNode root = mapper.readTree(jp); AckCallback<?> callback = currentAckClass.get(); Iterator<JsonNode> iter = root.iterator(); int i = 0; while (iter.hasNext()) { Object val; Class<?> clazz = callback.getResultClass(); if (callback instanceof MultiTypeAckCallback) { MultiTypeAckCallback multiTypeAckCallback = (MultiTypeAckCallback) callback; clazz = multiTypeAckCallback.getResultClasses()[i]; } JsonNode arg = iter.next(); if (arg.isTextual() || arg.isBoolean()) { clazz = Object.class; } val = mapper.treeToValue(arg, clazz); args.add(val); i++; } return result; }
private void scheduleTimeout(final long index, final UUID sessionId, AckCallback<?> callback) { if (callback.getTimeout() == -1) { return; } SchedulerKey key = new AckSchedulerKey(Type.ACK_TIMEOUT, sessionId, index); scheduler.scheduleCallback(key, new Runnable() { @Override public void run() { AckCallback<?> cb = removeCallback(sessionId, index); if (cb != null) { cb.onTimeout(); } } }, callback.getTimeout(), TimeUnit.SECONDS); }
@Override public void send(Packet packet, AckCallback<?> ackCallback) { if (!isConnected()) { ackCallback.onTimeout(); return; } long index = baseClient.getAckManager().registerAck(getSessionId(), ackCallback); packet.setAckId(index); send(packet); }
@Override public AckArgs readAckArgs(ByteBufInputStream src, AckCallback<?> callback) throws IOException { try { return delegate.readAckArgs(src, callback); } catch (Exception e) { src.reset(); log.error("Can't read ack args: " + src.readLine() + " for type: " + callback.getResultClass(), e); throw new IOException(e); } }
@Override public void run() { AckCallback<?> cb = removeCallback(sessionId, index); if (cb != null) { cb.onTimeout(); } } }, callback.getTimeout(), TimeUnit.SECONDS);
@Override public AckArgs deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { List<Object> args = new ArrayList<Object>(); AckArgs result = new AckArgs(args); ObjectMapper mapper = (ObjectMapper) jp.getCodec(); JsonNode root = mapper.readTree(jp); AckCallback<?> callback = currentAckClass.get(); Iterator<JsonNode> iter = root.iterator(); int i = 0; while (iter.hasNext()) { Object val; Class<?> clazz = callback.getResultClass(); if (callback instanceof MultiTypeAckCallback) { MultiTypeAckCallback multiTypeAckCallback = (MultiTypeAckCallback) callback; clazz = multiTypeAckCallback.getResultClasses()[i]; } JsonNode arg = iter.next(); if (arg.isTextual() || arg.isBoolean()) { clazz = Object.class; } val = mapper.treeToValue(arg, clazz); args.add(val); i++; } return result; }
@Override public void onDisconnect(ClientHead client) { AckEntry e = ackEntries.remove(client.getSessionId()); if (e == null) { return; } Set<Long> indexes = e.getAckIndexes(); for (Long index : indexes) { AckCallback<?> callback = e.getAckCallback(index); if (callback != null) { callback.onTimeout(); } SchedulerKey key = new AckSchedulerKey(Type.ACK_TIMEOUT, client.getSessionId(), index); scheduler.cancel(key); } }
@Override public void send(Packet packet, AckCallback<?> ackCallback) { if (!isConnected()) { ackCallback.onTimeout(); return; } long index = baseClient.getAckManager().registerAck(getSessionId(), ackCallback); packet.setAckId(index); send(packet); }