Я работаю над тестовым приложением, которое требует подключения к серверу и сохранения ответа от него. Ответ на самом деле представляет собой пакет данных, поэтому мне нужно понять, какой это тип пакета, и выполнить его. Сейчас я могу получить ответ, рассчитать пакет данных, и теперь мне нужна небольшая помощь с методом переключения, где я хочу получить тип пакета.
Вот код, который я использую:
RPCPacket packet=null;
switch(RPCPacketType.getPacketTypeByValue(pType)){
case ST_OBJECT_TYPE_INFO_START:
{
packet = new InfoStartRPCPacket( objectIdentificator,
RPCPacketType.getPacketTypeByValue(pType),
RPCOperationType.getByValue(Integer.parseInt(operation)),
objectId,
id,
Integer.parseInt(size),
hash,
RPCPacketDataType.getByValue(dataType),
first );
break;
}
case ST_OBJECT_TYPE_INFO_END:{
packet = new InfoEndRPCPacket();
break;
}
case ST_OBJECT_TYPE_INFO_ERROR:{
packet = new InfoErrorRPCPacket();
break;
}
// Basic packets
case ST_OBJECT_TYPE_COLLECTION:{
packet = new CollectionRPCPacket();
break;
}
case ST_OBJECT_TYPE_CATEGORY:{
packet = new CategoryRPCPacket();
break;
}
case ST_OBJECT_TYPE_CARD:{
packet = new CardRPCPacket();
break;
}
case ST_OBJECT_TYPE_MESSAGE:{
packet = new MessageRPCPacket();
break;
}
case ST_OBJECT_TYPE_GENRE:{
packet = new GenreRPCPacket();
break;
}
case ST_OBJECT_TYPE_TAG:{
packet = new TagRPCPacket();
break;
}
case ST_OBJECT_TYPE_USER:{
packet = new UserRPCPacket();
break;
}
case ST_OBJECT_TYPE_CARDSTATS_CATEGORY:{
packet = new CardStatsCategoryRPCPacket();
break;
}
case ST_OBJECT_TYPE_CONTENT:{
packet = new ContentRPCPacket();
break;
}
// Media packets
case ST_OBJECT_TYPE_MEDIA_COLLECTION:{
packet = new MediaCollectionRPCPacket();
break;
}
case ST_OBJECT_TYPE_MEDIA_CATEGORY:{
packet = new MediaCategoryRPCPacket();
break;
}
case ST_OBJECT_TYPE_MEDIA_CARD:{
packet = new MediaCardRPCPacket();
break;
}
case ST_OBJECT_TYPE_MEDIA_TAG:{
packet = new MediaTagRPCPacket();
break;
}
case ST_OBJECT_TYPE_MEDIA_COLLECTION_BUTTON:{
packet = new MediaCollectionButtonRPCPacket();
break;
}
// unknown packet
default: {
packet=null;
break;
}
}
Мне нужен способ, чтобы иметь возможность инициализировать пакет как InfoStartRPCPacket или что-то другое после того, как я проверил все коммутаторы. В основном я хочу иметь возможность сделать что-то вроде этого внешнего коммутатора:
packet.executeInfoStartPacket(/*params*/); , when executeInfoStartPacket is a method in InfoStartRPCPacket class.
Есть предложения, как это сделать?