use of net.minecraft.server.v1_9_R2.Packet in project vespa by vespa-engine.
the class FastSearcher method searchTwoPhase.
private Result searchTwoPhase(FS4Channel channel, Query query, QueryPacket queryPacket, CacheKey cacheKey) throws IOException {
if (isLoggingFine())
getLogger().finest("sending query packet");
try {
boolean couldSend = channel.sendPacket(queryPacket);
if (!couldSend)
return new Result(query, ErrorMessage.createBackendCommunicationError("Could not reach '" + getName() + "'"));
} catch (InvalidChannelException e) {
return new Result(query, ErrorMessage.createBackendCommunicationError("Invalid channel " + getName()));
} catch (IllegalStateException e) {
return new Result(query, ErrorMessage.createBackendCommunicationError("Illegal state in FS4: " + e.getMessage()));
}
BasicPacket[] basicPackets;
try {
basicPackets = channel.receivePackets(query.getTimeLeft(), 1);
} catch (ChannelTimeoutException e) {
return new Result(query, ErrorMessage.createTimeout("Timeout while waiting for " + getName()));
} catch (InvalidChannelException e) {
return new Result(query, ErrorMessage.createBackendCommunicationError("Invalid channel for " + getName()));
}
if (basicPackets.length == 0) {
return new Result(query, ErrorMessage.createBackendCommunicationError(getName() + " got no packets back"));
}
if (isLoggingFine())
getLogger().finest("got packets " + basicPackets.length + " packets");
ensureInstanceOf(QueryResultPacket.class, basicPackets[0], getName());
QueryResultPacket resultPacket = (QueryResultPacket) basicPackets[0];
if (isLoggingFine())
getLogger().finest("got query packet. " + "docsumClass=" + query.getPresentation().getSummary());
if (query.getPresentation().getSummary() == null)
query.getPresentation().setSummary(getDefaultDocsumClass());
Result result = new Result(query);
addMetaInfo(query, queryPacket.getQueryPacketData(), resultPacket, result, false);
addUnfilledHits(result, resultPacket.getDocuments(), false, queryPacket.getQueryPacketData(), cacheKey);
Packet[] packets;
PacketWrapper packetWrapper = cacheControl.lookup(cacheKey, query);
if (packetWrapper != null) {
cacheControl.updateCacheEntry(cacheKey, query, resultPacket);
} else {
if (resultPacket.getCoverageFeature() && !resultPacket.getCoverageFull()) {
// Don't add error here, it was done in first phase
// No check if packetWrapper already exists, since incomplete
// first phase data won't be cached anyway.
} else {
packets = new Packet[1];
packets[0] = resultPacket;
cacheControl.cache(cacheKey, query, new DocsumPacketKey[0], packets);
}
}
return result;
}
use of net.minecraft.server.v1_9_R2.Packet in project vespa by vespa-engine.
the class FS4Channel method receivePackets.
/**
* Receives the given number of packets and returns them, OR
* <ul>
* <li>Returns a smaller number of packets if an error or eol packet is received
* <li>Throws a ChannelTimeoutException if timeout occurs before all packets
* are received. Packets received with the wrong channel id are ignored.
* </ul>
*
* @param timeout the number of ms to attempt to get packets before throwing an exception
* @param packetCount the number of packets to receive, or -1 to receive any number up to eol/error
*/
public BasicPacket[] receivePackets(long timeout, int packetCount) throws InvalidChannelException, ChannelTimeoutException {
ensureValid();
List<BasicPacket> packets = new ArrayList<>(12);
long startTime = SystemTimer.INSTANCE.milliTime();
long timeLeft = timeout;
try {
while (timeLeft >= 0) {
BasicPacket p = nextPacket(timeLeft);
if (p == null)
throw new ChannelTimeoutException("Timed out");
if (!isPingChannel && ((Packet) p).getChannel() != getChannelId().intValue()) {
log.warning("Ignoring received " + p + ", when excepting channel " + getChannelId());
continue;
}
packets.add(p);
if (isLastPacket(p) || hasEnoughPackets(packetCount, packets)) {
BasicPacket[] packetArray = new BasicPacket[packets.size()];
packets.toArray(packetArray);
return packetArray;
}
// doing this last might save us one system call for the last
// packet.
timeLeft = timeout - (SystemTimer.INSTANCE.milliTime() - startTime);
}
} catch (InvalidChannelException e) {
// nop. if we get this we want to return the default
// zero length packet array indicating that we have no
// valid response
log.info("FS4Channel was invalid. timeLeft=" + timeLeft + ", timeout=" + timeout);
} catch (InterruptedException e) {
log.info("FS4Channel was interrupted. timeLeft=" + timeLeft + ", timeout=" + timeout);
Thread.currentThread().interrupt();
}
// did not get the end of the packet stream
throw new ChannelTimeoutException();
}
use of net.minecraft.server.v1_9_R2.Packet in project Citizens2 by CitizensDev.
the class EntityHumanNPC method updatePackets.
private void updatePackets(boolean navigating) {
updateCounter++;
boolean itemChanged = false;
for (EnumItemSlot slot : EnumItemSlot.values()) {
ItemStack equipment = getEquipment(slot);
ItemStack cache = equipmentCache.get(slot);
if (!(cache == null && equipment == null) && (cache == null ^ equipment == null || !ItemStack.equals(cache, equipment))) {
itemChanged = true;
}
equipmentCache.put(slot, equipment);
}
if (updateCounter++ <= npc.data().<Integer>get(NPC.Metadata.PACKET_UPDATE_DELAY, Setting.PACKET_UPDATE_DELAY.asInt()) && !itemChanged)
return;
updateCounter = 0;
Location current = getBukkitEntity().getLocation(packetLocationCache);
Packet<?>[] packets = new Packet[EnumItemSlot.values().length];
int i = 0;
for (EnumItemSlot slot : EnumItemSlot.values()) {
packets[i++] = new PacketPlayOutEntityEquipment(getId(), slot, getEquipment(slot));
}
NMSImpl.sendPacketsNearby(getBukkitEntity(), current, packets);
}
use of net.minecraft.server.v1_9_R2.Packet in project Citizens2 by CitizensDev.
the class EntityHumanNPC method updatePackets.
private void updatePackets(boolean navigating) {
updateCounter++;
boolean itemChanged = false;
for (EnumItemSlot slot : EnumItemSlot.values()) {
ItemStack equipment = getEquipment(slot);
ItemStack cache = equipmentCache.get(slot);
if (!(cache == null && equipment == null) && (cache == null ^ equipment == null || !ItemStack.equals(cache, equipment))) {
itemChanged = true;
}
equipmentCache.put(slot, equipment);
}
if (updateCounter++ <= npc.data().<Integer>get(NPC.Metadata.PACKET_UPDATE_DELAY, Setting.PACKET_UPDATE_DELAY.asInt()) && !itemChanged)
return;
updateCounter = 0;
Location current = getBukkitEntity().getLocation(packetLocationCache);
Packet<?>[] packets = new Packet[1];
List<Pair<EnumItemSlot, ItemStack>> vals = Lists.newArrayList();
for (EnumItemSlot slot : EnumItemSlot.values()) {
vals.add(new Pair<EnumItemSlot, ItemStack>(slot, getEquipment(slot)));
}
packets[0] = new PacketPlayOutEntityEquipment(getId(), vals);
NMSImpl.sendPacketsNearby(getBukkitEntity(), current, packets);
}
use of net.minecraft.server.v1_9_R2.Packet in project Citizens2 by CitizensDev.
the class EntityHumanNPC method updatePackets.
private void updatePackets(boolean navigating) {
updateCounter++;
boolean itemChanged = false;
for (EnumItemSlot slot : EnumItemSlot.values()) {
ItemStack equipment = getEquipment(slot);
ItemStack cache = equipmentCache.get(slot);
if (!(cache == null && equipment == null) && (cache == null ^ equipment == null || !ItemStack.equals(cache, equipment))) {
itemChanged = true;
}
equipmentCache.put(slot, equipment);
}
if (updateCounter++ <= npc.data().<Integer>get(NPC.Metadata.PACKET_UPDATE_DELAY, Setting.PACKET_UPDATE_DELAY.asInt()) && !itemChanged)
return;
updateCounter = 0;
Location current = getBukkitEntity().getLocation(packetLocationCache);
Packet<?>[] packets = new Packet[EnumItemSlot.values().length];
int i = 0;
for (EnumItemSlot slot : EnumItemSlot.values()) {
packets[i++] = new PacketPlayOutEntityEquipment(getId(), slot, getEquipment(slot));
}
NMSImpl.sendPacketsNearby(getBukkitEntity(), current, packets);
}
Aggregations