forked from Qortal/qortal
CalDescent
3 years ago
6 changed files with 284 additions and 3 deletions
@ -0,0 +1,55 @@
|
||||
package org.qortal.network.message; |
||||
|
||||
import org.qortal.transform.Transformer; |
||||
import org.qortal.utils.Base58; |
||||
|
||||
import java.io.ByteArrayOutputStream; |
||||
import java.io.IOException; |
||||
import java.io.UnsupportedEncodingException; |
||||
import java.nio.ByteBuffer; |
||||
|
||||
public class GetAccountNamesMessage extends Message { |
||||
|
||||
private static final int ADDRESS_LENGTH = Transformer.ADDRESS_LENGTH; |
||||
|
||||
private String address; |
||||
|
||||
public GetAccountNamesMessage(String address) { |
||||
this(-1, address); |
||||
} |
||||
|
||||
private GetAccountNamesMessage(int id, String address) { |
||||
super(id, MessageType.GET_ACCOUNT_NAMES); |
||||
|
||||
this.address = address; |
||||
} |
||||
|
||||
public String getAddress() { |
||||
return this.address; |
||||
} |
||||
|
||||
|
||||
public static Message fromByteBuffer(int id, ByteBuffer bytes) throws UnsupportedEncodingException { |
||||
byte[] addressBytes = new byte[ADDRESS_LENGTH]; |
||||
bytes.get(addressBytes); |
||||
String address = Base58.encode(addressBytes); |
||||
|
||||
return new GetAccountNamesMessage(id, address); |
||||
} |
||||
|
||||
@Override |
||||
protected byte[] toData() { |
||||
try { |
||||
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); |
||||
|
||||
// Send raw address instead of base58 encoded
|
||||
byte[] address = Base58.decode(this.address); |
||||
bytes.write(address); |
||||
|
||||
return bytes.toByteArray(); |
||||
} catch (IOException e) { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,149 @@
|
||||
package org.qortal.network.message; |
||||
|
||||
import com.google.common.primitives.Ints; |
||||
import com.google.common.primitives.Longs; |
||||
import org.qortal.data.naming.NameData; |
||||
import org.qortal.naming.Name; |
||||
import org.qortal.transform.TransformationException; |
||||
import org.qortal.transform.Transformer; |
||||
import org.qortal.utils.Serialization; |
||||
|
||||
import java.io.ByteArrayOutputStream; |
||||
import java.io.IOException; |
||||
import java.io.UnsupportedEncodingException; |
||||
import java.nio.ByteBuffer; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class NamesMessage extends Message { |
||||
|
||||
private static final int SIGNATURE_LENGTH = Transformer.SIGNATURE_LENGTH; |
||||
|
||||
private final List<NameData> nameDataList; |
||||
|
||||
public NamesMessage(List<NameData> nameDataList) { |
||||
super(MessageType.NAMES); |
||||
|
||||
this.nameDataList = nameDataList; |
||||
} |
||||
|
||||
public NamesMessage(int id, List<NameData> nameDataList) { |
||||
super(id, MessageType.NAMES); |
||||
|
||||
this.nameDataList = nameDataList; |
||||
} |
||||
|
||||
public List<NameData> getNameDataList() { |
||||
return this.nameDataList; |
||||
} |
||||
|
||||
|
||||
public static Message fromByteBuffer(int id, ByteBuffer bytes) throws UnsupportedEncodingException { |
||||
try { |
||||
final int nameCount = bytes.getInt(); |
||||
|
||||
List<NameData> nameDataList = new ArrayList<>(nameCount); |
||||
|
||||
for (int i = 0; i < nameCount; ++i) { |
||||
String name = Serialization.deserializeSizedStringV2(bytes, Name.MAX_NAME_SIZE); |
||||
|
||||
String reducedName = Serialization.deserializeSizedStringV2(bytes, Name.MAX_NAME_SIZE); |
||||
|
||||
String owner = Serialization.deserializeAddress(bytes); |
||||
|
||||
String data = Serialization.deserializeSizedStringV2(bytes, Name.MAX_DATA_SIZE); |
||||
|
||||
long registered = bytes.getLong(); |
||||
|
||||
int wasUpdated = bytes.getInt(); |
||||
|
||||
Long updated = null; |
||||
if (wasUpdated == 1) { |
||||
updated = bytes.getLong(); |
||||
} |
||||
|
||||
boolean isForSale = (bytes.getInt() == 1); |
||||
|
||||
Long salePrice = null; |
||||
if (isForSale) { |
||||
salePrice = bytes.getLong(); |
||||
} |
||||
|
||||
byte[] reference = new byte[SIGNATURE_LENGTH]; |
||||
bytes.get(reference); |
||||
|
||||
int creationGroupId = bytes.getInt(); |
||||
|
||||
NameData nameData = new NameData(name, reducedName, owner, data, registered, updated, |
||||
isForSale, salePrice, reference, creationGroupId); |
||||
nameDataList.add(nameData); |
||||
} |
||||
|
||||
if (bytes.hasRemaining()) { |
||||
return null; |
||||
} |
||||
|
||||
return new NamesMessage(id, nameDataList); |
||||
|
||||
} catch (TransformationException e) { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
protected byte[] toData() { |
||||
if (this.nameDataList == null) { |
||||
return null; |
||||
} |
||||
|
||||
try { |
||||
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); |
||||
|
||||
bytes.write(Ints.toByteArray(this.nameDataList.size())); |
||||
|
||||
for (int i = 0; i < this.nameDataList.size(); ++i) { |
||||
NameData nameData = this.nameDataList.get(i); |
||||
|
||||
Serialization.serializeSizedStringV2(bytes, nameData.getName()); |
||||
|
||||
Serialization.serializeSizedStringV2(bytes, nameData.getReducedName()); |
||||
|
||||
Serialization.serializeAddress(bytes, nameData.getOwner()); |
||||
|
||||
Serialization.serializeSizedStringV2(bytes, nameData.getData()); |
||||
|
||||
bytes.write(Longs.toByteArray(nameData.getRegistered())); |
||||
|
||||
Long updated = nameData.getUpdated(); |
||||
int wasUpdated = (updated != null) ? 1 : 0; |
||||
bytes.write(Ints.toByteArray(wasUpdated)); |
||||
|
||||
if (updated != null) { |
||||
bytes.write(Longs.toByteArray(nameData.getUpdated())); |
||||
} |
||||
|
||||
int isForSale = nameData.isForSale() ? 1 : 0; |
||||
bytes.write(Ints.toByteArray(isForSale)); |
||||
|
||||
if (nameData.isForSale()) { |
||||
bytes.write(Longs.toByteArray(nameData.getSalePrice())); |
||||
} |
||||
|
||||
bytes.write(nameData.getReference()); |
||||
|
||||
bytes.write(Ints.toByteArray(nameData.getCreationGroupId())); |
||||
} |
||||
|
||||
return bytes.toByteArray(); |
||||
} catch (IOException e) { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
public NamesMessage cloneWithNewId(int newId) { |
||||
NamesMessage clone = new NamesMessage(this.nameDataList); |
||||
clone.setId(newId); |
||||
return clone; |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue