Created NetworkedClientItemManager subclass of ClientItemManager

Changed ClientItemManager to delegate to Riiablo.charData
NetworkedClientItemManager posts item management requests to the client's socket
This commit is contained in:
Collin Smith 2020-05-31 23:55:33 -07:00
parent be70756aeb
commit 970073296c
3 changed files with 133 additions and 6 deletions

View File

@ -1,5 +1,6 @@
package com.riiablo.engine.client;
import com.riiablo.Riiablo;
import com.riiablo.item.BodyLoc;
import com.riiablo.item.Item;
import com.riiablo.item.StoreLoc;
@ -12,11 +13,7 @@ import net.mostlyoriginal.api.system.core.PassiveSystem;
public class ClientItemManager extends PassiveSystem implements ItemController {
private static final String TAG = "ClientItemManager";
final ItemController delegate;
public ClientItemManager(ItemController delegate) {
this.delegate = delegate;
}
final ItemController delegate = Riiablo.charData;
@Override
public void groundToCursor(Item item) {

View File

@ -0,0 +1,129 @@
package com.riiablo.engine.client;
import com.google.flatbuffers.FlatBufferBuilder;
import com.artemis.annotations.Wire;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.net.Socket;
import com.riiablo.item.BodyLoc;
import com.riiablo.item.Item;
import com.riiablo.item.StoreLoc;
import com.riiablo.net.packet.d2gs.BeltToCursor;
import com.riiablo.net.packet.d2gs.BodyToCursor;
import com.riiablo.net.packet.d2gs.CursorToBelt;
import com.riiablo.net.packet.d2gs.CursorToBody;
import com.riiablo.net.packet.d2gs.CursorToGround;
import com.riiablo.net.packet.d2gs.CursorToStore;
import com.riiablo.net.packet.d2gs.D2GS;
import com.riiablo.net.packet.d2gs.D2GSData;
import com.riiablo.net.packet.d2gs.GroundToCursor;
import com.riiablo.net.packet.d2gs.StoreToCursor;
import com.riiablo.net.packet.d2gs.SwapBeltItem;
import com.riiablo.net.packet.d2gs.SwapBodyItem;
import com.riiablo.net.packet.d2gs.SwapStoreItem;
import java.io.OutputStream;
import java.nio.channels.Channels;
import java.nio.channels.WritableByteChannel;
public class NetworkedClientItemManager extends ClientItemManager {
private static final String TAG = "NetworkedClientItemManager";
@Wire(name = "client.socket")
protected Socket socket;
private void wrapAndSend(FlatBufferBuilder builder, byte data_type, int dataOffset) {
int root = D2GS.createD2GS(builder, data_type, dataOffset);
D2GS.finishSizePrefixedD2GSBuffer(builder, root);
try {
OutputStream out = socket.getOutputStream();
WritableByteChannel channelOut = Channels.newChannel(out);
channelOut.write(builder.dataBuffer());
} catch (Throwable t) {
Gdx.app.error(TAG, t.getMessage(), t);
}
}
private FlatBufferBuilder obtainBuilder() {
return new FlatBufferBuilder(0);
}
@Override
public void groundToCursor(Item item) {
FlatBufferBuilder builder = obtainBuilder();
int dataOffset = GroundToCursor.createGroundToCursor(builder, 0);
wrapAndSend(builder, D2GSData.GroundToCursor, dataOffset);
}
@Override
public void cursorToGround() {
FlatBufferBuilder builder = obtainBuilder();
CursorToGround.startCursorToGround(builder);
int dataOffset = CursorToGround.endCursorToGround(builder);
wrapAndSend(builder, D2GSData.CursorToGround, dataOffset);
}
@Override
public void storeToCursor(int i) {
FlatBufferBuilder builder = obtainBuilder();
int dataOffset = StoreToCursor.createStoreToCursor(builder, i);
wrapAndSend(builder, D2GSData.StoreToCursor, dataOffset);
}
@Override
public void cursorToStore(StoreLoc storeLoc, int x, int y) {
FlatBufferBuilder builder = obtainBuilder();
int dataOffset = CursorToStore.createCursorToStore(builder, storeLoc.ordinal(), x, y);
wrapAndSend(builder, D2GSData.CursorToStore, dataOffset);
}
@Override
public void swapStoreItem(int i, StoreLoc storeLoc, int x, int y) {
FlatBufferBuilder builder = obtainBuilder();
int dataOffset = SwapStoreItem.createSwapStoreItem(builder, i, storeLoc.ordinal(), x, y);
wrapAndSend(builder, D2GSData.SwapStoreItem, dataOffset);
}
@Override
public void bodyToCursor(BodyLoc bodyLoc, boolean merc) {
FlatBufferBuilder builder = obtainBuilder();
int dataOffset = BodyToCursor.createBodyToCursor(builder, bodyLoc.ordinal(), merc);
wrapAndSend(builder, D2GSData.BodyToCursor, dataOffset);
}
@Override
public void cursorToBody(BodyLoc bodyLoc, boolean merc) {
FlatBufferBuilder builder = obtainBuilder();
int dataOffset = CursorToBody.createCursorToBody(builder, bodyLoc.ordinal(), merc);
wrapAndSend(builder, D2GSData.CursorToBody, dataOffset);
}
@Override
public void swapBodyItem(BodyLoc bodyLoc, boolean merc) {
FlatBufferBuilder builder = obtainBuilder();
int dataOffset = SwapBodyItem.createSwapBodyItem(builder, bodyLoc.ordinal(), merc);
wrapAndSend(builder, D2GSData.SwapBodyItem, dataOffset);
}
@Override
public void beltToCursor(int i) {
FlatBufferBuilder builder = obtainBuilder();
int dataOffset = BeltToCursor.createBeltToCursor(builder, i);
wrapAndSend(builder, D2GSData.BeltToCursor, dataOffset);
}
@Override
public void cursorToBelt(int x, int y) {
FlatBufferBuilder builder = obtainBuilder();
int dataOffset = CursorToBelt.createCursorToBelt(builder, x, y);
wrapAndSend(builder, D2GSData.CursorToBelt, dataOffset);
}
@Override
public void swapBeltItem(int i) {
FlatBufferBuilder builder = obtainBuilder();
int dataOffset = SwapBeltItem.createSwapBeltItem(builder, i);
wrapAndSend(builder, D2GSData.SwapBeltItem, dataOffset);
}
}

View File

@ -64,6 +64,7 @@ import com.riiablo.engine.client.MenuManager;
import com.riiablo.engine.client.MissileLoader;
import com.riiablo.engine.client.MonsterLabelManager;
import com.riiablo.engine.client.NetworkIdManager;
import com.riiablo.engine.client.NetworkedClientItemManager;
import com.riiablo.engine.client.SelectableManager;
import com.riiablo.engine.client.SoundEmitterHandler;
import com.riiablo.engine.client.WarpSubstManager;
@ -487,7 +488,7 @@ public class GameScreen extends ScreenAdapter implements GameLoadingScreen.Loada
iso = renderer.iso();
scaledStage = new Stage(new ScreenViewport(iso), Riiablo.batch);
factory = new ClientEntityFactory();
itemController = new ClientItemManager(Riiablo.charData);
itemController = socket == null ? new ClientItemManager() : new NetworkedClientItemManager();
WorldConfiguration config = getWorldConfiguration();
config