Wait why were these not in the Git

This commit is contained in:
Nekojimi 2025-09-03 12:17:01 +01:00
parent 6f8f424d8d
commit 785ea6fd7f
2 changed files with 98 additions and 0 deletions

View file

@ -0,0 +1,65 @@
package moe.nekojimi.friendcloud.network.requests;
import com.google.protobuf.Any;
import com.google.protobuf.InvalidProtocolBufferException;
import moe.nekojimi.friendcloud.Model;
import moe.nekojimi.friendcloud.objects.NetworkObject;
import moe.nekojimi.friendcloud.protos.ObjectStatements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class ObjectListRequest extends Request<ObjectStatements.ObjectListRequest, List<NetworkObject>>
{
private final Set<ObjectStatements.ObjectType> types;
public ObjectListRequest(Set<ObjectStatements.ObjectType> types)
{
this.types = types;
}
@Override
public ObjectStatements.ObjectListRequest buildMessage()
{
return ObjectStatements.ObjectListRequest.newBuilder().addAllTypes(types).build();
}
@Override
public boolean handleReply(Any reply) throws InvalidProtocolBufferException
{
if (super.handleReply(reply))
return true;
try
{
if (reply.is(ObjectStatements.ObjectList.class))
{
ObjectStatements.ObjectList objectList = reply.unpack(ObjectStatements.ObjectList.class);
System.out.println("Received ObjectList, objects=" + objectList.getStatesList());
List<NetworkObject> ret = new ArrayList<>();
for (ObjectStatements.ObjectState objectState : objectList.getStatesList())
{
System.out.println("Received state of object " + objectState.getObjectId());
NetworkObject object = Model.getInstance().getOrCreateObject(new NetworkObject.ObjectID(objectState.getObjectId()));
object.updateFromStateMessage(objectState);
ret.add(object);
}
future.complete(ret);
return true;
}
}
catch (IOException ex)
{
ex.printStackTrace(System.err);
return true;
}
return false;
}
}

View file

@ -0,0 +1,33 @@
package moe.nekojimi.friendcloud.network.requests;
import com.google.protobuf.Any;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.Message;
import moe.nekojimi.friendcloud.protos.CommonMessages;
import java.util.concurrent.CompletableFuture;
public abstract class Request<MessageType extends Message, ReturnType>
{
protected CompletableFuture<ReturnType> future = null;
public abstract MessageType buildMessage();
public boolean handleReply(Any reply) throws InvalidProtocolBufferException
{
if (reply.is(CommonMessages.ErrorMessage.class))
{
CommonMessages.ErrorMessage errorMessage = reply.unpack(CommonMessages.ErrorMessage.class);
future.completeExceptionally(new RuntimeException("Request received error response: " + errorMessage.getError().name()));
return true;
}
return false;
}
public CompletableFuture<ReturnType> getFuture()
{
if (future == null)
future = new CompletableFuture<>();
return future;
}
}