@Override public void execute(Packet data) throws IOException { fromGuid = data.readInt(); invitationCode = data.readUTF(); fromNickname = data.readUTF(); core.queNeedsUserInteraction( new ForwardedInvitationInteraction( con.getRemoteFriend(), fromNickname, fromGuid, invitationCode)); }
@Override public void execute(Packet in) throws IOException { String host = in.readUTF(); if (!IpDetection.isLan(host, false)) { manager.getNetMan().getIpDetection().setLastExternalIp(host); } }
@Override public void execute(Packet in) throws IOException { message = in.readUTF(); messageToAll = in.readBoolean(); sentAtTick = in.readLong(); hasBeenQueuedForLaterSend = in.readBoolean(); if (messageToAll) { manager .getCore() .queNeedsUserInteraction( new PostMessageToAllInteraction( message, fromGuid, sentAtTick, hasBeenQueuedForLaterSend)); } else { manager .getCore() .queNeedsUserInteraction( new PostMessageInteraction(message, fromGuid, sentAtTick, hasBeenQueuedForLaterSend)); } }
@Override public void execute(Packet in) throws IOException { Friend f = con.getRemoteFriend(); boolean guidMismatch = false; int remoteGUID = in.readInt(); if (remoteGUID != f.getGuid()) { if (T.t) { T.warn("GUID mismatch!!! Closing connection."); } // f.setGuid(remoteGUID); guidMismatch = true; } int port = in.readInt(); f.updateLastKnownHostInfo( manager.getNetMan().getSocketFor(con).getInetAddress().getHostAddress(), port); f.setShareSize(in.readLong()); int buildNumber = in.readInt(); f.setAllianceBuildNumber(buildNumber); f.setTotalBytesReceived(in.readLong()); f.setTotalBytesSent(in.readLong()); f.setHighestIncomingCPS(in.readInt()); f.setHighestOutgoingCPS(in.readInt()); f.setNumberOfFilesShared(in.readInt()); f.setNumberOfInvitedFriends(in.readInt()); try { String dnsName = in.readUTF(); if (!dnsName.trim().isEmpty()) { f.updateLastKnownHostInfo(dnsName, port); } } catch (BufferUnderflowException ex) { } if (CoreSubsystem.ALLOW_TO_SEND_UPGRADE_TO_FRIENDS) { if (buildNumber < Version.BUILD_NUMBER && buildNumber > 1120) { // remote has old version Hash h = core.getFileManager().getAutomaticUpgrade().getMyJarHash(); if (h != null) { send(new NewVersionAvailable(h)); } } } // now that we have a good connection to friend: verify that we only have ONE connection if (con.getRemoteFriend().hasMultipleFriendConnections()) { if (T.t) { T.trace( "Has multple connections to a friend. Figuring out wich one of us should close the connection"); } if ((con.getDirection() == Connection.Direction.IN && con.getRemoteUserGUID() > manager.getMyGUID()) || (con.getDirection() == Connection.Direction.OUT && manager.getMyGUID() > con.getRemoteUserGUID())) { // serveral connections. Its up to us to close one if (T.t) { T.info("Already connected to " + con.getRemoteFriend() + ". Closing connection"); } send(new GracefulClose(GracefulClose.DUPLICATE_CONNECTION)); // con.close(); // close connection when we in turn receive a graceful close } } if (guidMismatch) { send(new GracefulClose(GracefulClose.GUID_MISMATCH)); } else { // this is the place for an event: "FriendSuccessfullyConnected". core.getNetworkManager().signalFriendConnected(con.getRemoteFriend()); core.getUICallback().nodeOrSubnodesUpdated(con.getRemoteFriend()); core.updateLastSeenOnlineFor(con.getRemoteFriend()); System.setProperty("alliance.network.friendsonline", "" + manager.getNFriendsConnected()); } }