Add party service
This commit is contained in:
@@ -68,6 +68,7 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
|
|||||||
import net.runelite.client.ui.overlay.infobox.InfoBoxOverlay;
|
import net.runelite.client.ui.overlay.infobox.InfoBoxOverlay;
|
||||||
import net.runelite.client.ui.overlay.tooltip.TooltipOverlay;
|
import net.runelite.client.ui.overlay.tooltip.TooltipOverlay;
|
||||||
import net.runelite.client.ui.overlay.worldmap.WorldMapOverlay;
|
import net.runelite.client.ui.overlay.worldmap.WorldMapOverlay;
|
||||||
|
import net.runelite.client.ws.PartyService;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@@ -111,6 +112,9 @@ public class RuneLite
|
|||||||
@Inject
|
@Inject
|
||||||
private OverlayManager overlayManager;
|
private OverlayManager overlayManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PartyService partyService;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Provider<ItemManager> itemManager;
|
private Provider<ItemManager> itemManager;
|
||||||
|
|
||||||
@@ -265,6 +269,7 @@ public class RuneLite
|
|||||||
eventBus.register(overlayManager);
|
eventBus.register(overlayManager);
|
||||||
eventBus.register(drawManager);
|
eventBus.register(drawManager);
|
||||||
eventBus.register(infoBoxManager);
|
eventBus.register(infoBoxManager);
|
||||||
|
eventBus.register(partyService);
|
||||||
|
|
||||||
if (!isOutdated)
|
if (!isOutdated)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Tomas Slusny <slusnucky@gmail.com>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.events;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import lombok.Value;
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public class PartyChanged
|
||||||
|
{
|
||||||
|
private final UUID partyId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.ws;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.util.UUID;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PartyMember
|
||||||
|
{
|
||||||
|
private final UUID memberId;
|
||||||
|
private final String name;
|
||||||
|
private BufferedImage avatar;
|
||||||
|
}
|
||||||
@@ -0,0 +1,177 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.client.ws;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.runelite.client.account.AccountSession;
|
||||||
|
import net.runelite.client.account.SessionManager;
|
||||||
|
import net.runelite.client.eventbus.EventBus;
|
||||||
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
|
import net.runelite.client.events.PartyChanged;
|
||||||
|
import net.runelite.http.api.ws.messages.party.Join;
|
||||||
|
import net.runelite.http.api.ws.messages.party.Part;
|
||||||
|
import net.runelite.http.api.ws.messages.party.UserJoin;
|
||||||
|
import net.runelite.http.api.ws.messages.party.UserPart;
|
||||||
|
import net.runelite.http.api.ws.messages.party.UserSync;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Singleton
|
||||||
|
public class PartyService
|
||||||
|
{
|
||||||
|
public static final int PARTY_MAX = 15;
|
||||||
|
|
||||||
|
private final WSClient wsClient;
|
||||||
|
private final SessionManager sessionManager;
|
||||||
|
private final EventBus eventBus;
|
||||||
|
private final List<PartyMember> members = new ArrayList<>();
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private UUID localPartyId = UUID.randomUUID();
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private UUID partyId = localPartyId;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PartyService(final WSClient wsClient, final SessionManager sessionManager, final EventBus eventBus)
|
||||||
|
{
|
||||||
|
this.wsClient = wsClient;
|
||||||
|
this.sessionManager = sessionManager;
|
||||||
|
this.eventBus = eventBus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeParty(UUID newParty)
|
||||||
|
{
|
||||||
|
if (wsClient.sessionExists())
|
||||||
|
{
|
||||||
|
wsClient.send(new Part());
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug("Party change to {}", newParty);
|
||||||
|
members.clear();
|
||||||
|
partyId = newParty;
|
||||||
|
|
||||||
|
if (partyId == null)
|
||||||
|
{
|
||||||
|
localPartyId = UUID.randomUUID(); // cycle local party id so that a new party is created now
|
||||||
|
partyId = localPartyId;
|
||||||
|
|
||||||
|
// close the websocket if the session id isn't for an account
|
||||||
|
if (sessionManager.getAccountSession() == null)
|
||||||
|
{
|
||||||
|
wsClient.changeSession(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
eventBus.post(new PartyChanged(partyId));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there isn't already a session open, open one
|
||||||
|
if (!wsClient.sessionExists())
|
||||||
|
{
|
||||||
|
AccountSession accountSession = sessionManager.getAccountSession();
|
||||||
|
// Use the existing account session, if it exists, otherwise generate a new session id
|
||||||
|
UUID uuid = accountSession != null ? accountSession.getUuid() : UUID.randomUUID();
|
||||||
|
wsClient.changeSession(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
eventBus.post(new PartyChanged(partyId));
|
||||||
|
wsClient.send(new Join(partyId, username));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onUserJoin(final UserJoin message)
|
||||||
|
{
|
||||||
|
log.debug("User {} joined", message);
|
||||||
|
final PartyMember partyMember = new PartyMember(message.getMemberId(), message.getName());
|
||||||
|
members.add(partyMember);
|
||||||
|
|
||||||
|
final PartyMember localMember = getLocalMember();
|
||||||
|
|
||||||
|
// Send info to other clients that this user successfully finished joining party
|
||||||
|
if (localMember != null && message.getMemberId().equals(localMember.getMemberId()))
|
||||||
|
{
|
||||||
|
wsClient.send(new UserSync(message.getMemberId()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onUserPart(final UserPart message)
|
||||||
|
{
|
||||||
|
log.debug("User {} left", message);
|
||||||
|
members.removeIf(member -> member.getMemberId().equals(message.getMemberId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public PartyMember getLocalMember()
|
||||||
|
{
|
||||||
|
return getMemberByName(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PartyMember getMemberById(final UUID id)
|
||||||
|
{
|
||||||
|
for (PartyMember member : members)
|
||||||
|
{
|
||||||
|
if (id.equals(member.getMemberId()))
|
||||||
|
{
|
||||||
|
return member;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PartyMember getMemberByName(final String name)
|
||||||
|
{
|
||||||
|
for (PartyMember member : members)
|
||||||
|
{
|
||||||
|
if (name.equals(member.getName()))
|
||||||
|
{
|
||||||
|
return member;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PartyMember> getMembers()
|
||||||
|
{
|
||||||
|
return Collections.unmodifiableList(members);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOwner()
|
||||||
|
{
|
||||||
|
return partyId == null || localPartyId.equals(partyId);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user