mirror of https://github.com/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