- Latest Versions
| Name | Version | Description |
|---|---|---|
| Ming Ke Ming (名可名) | Decentralized User Identity Authentication | |
| Dao Ke Dao (道可道) | Universal Message Module | |
| DIMP (去中心化通讯协议) | Decentralized Instant Messaging Protocol |
- Account
- Address
- BTC
- ETH
- Meta
- MKM (Default)
- BTC
- ETH
- Document
- Visa (User)
- Profile
- Bulletin (Group)
- Address
- Message Contents
- Text Content
- File Content
- Image Content
- Audio Content
- Video Content
- Page Content
- Name Card
- Quote Content
- Money Content
- Transfer Money
- Combine Forward
- System Commands
- Meta Command
- Document Command
- Receipt Command
- History Command
- Group Command
- Invite
- Expel
- Query
- Quit
- Join
import 'package:dimp/crypto.dart';
import 'package:dimax/mkm.dart';
import 'package:dimax/ext.dart';
class CompatibleAddressFactory extends BaseAddressFactory {
/// Call it when received 'UIApplicationDidReceiveMemoryWarningNotification',
/// this will remove 50% of cached objects
///
/// @return number of survivors
int reduceMemory() {
var cache = sharedAccountExtensions.addressCache;
return cache.reduceMemory();
}
@override
Address? parse(String address) {
try {
var res = super.parse(address);
if (res != null) {
return res;
}
} catch (e, st) {
// FIXME:
assert(false, 'invalid address: $address, error: $e, $st');
}
//
// TODO: parse for other types of address
//
int len = address.length;
if (4 <= len && len <= 64) {
return UnknownAddress(address);
}
assert(false, 'invalid address: $address');
return null;
}
}
/// Unsupported Address
/// ~~~~~~~~~~~~~~~~~~~
class UnknownAddress extends ConstantString implements Address {
UnknownAddress(super.string);
@override
int get network => 0; // EntityType.USER;
}import 'package:dimp/crypto.dart';
import 'package:dimp/mkm.dart';
import 'package:dimp/ext.dart';
import 'package:dimap/mkm.dart';
class CompatibleMetaFactory extends BaseMetaFactory {
CompatibleMetaFactory(super.type);
@override
Meta? parseMeta(Map meta) {
Meta out;
var helper = sharedAccountExtensions.helper;
String? version = helper?.getMetaType(meta);
switch (version) {
case 'MKM':
case 'mkm':
case '1':
out = DefaultMeta(meta);
break;
case 'BTC':
case 'btc':
case '2':
out = BTCMeta(meta);
break;
case 'ETH':
case 'eth':
case '4':
out = ETHMeta(meta);
break;
default:
// TODO: other types of meta
throw Exception('unknown meta type: $type');
}
return out.isValid ? out : null;
}
}import 'package:dimp/dimp.dart';
import 'package:dimax/dimax.dart';
import 'compat/address.dart';
import 'compat/meta.dart';
import 'protocol/handshake.dart';
import 'protocol/customized.dart';
/// Extensions Loader
/// ~~~~~~~~~~~~~~~~~
class CommonExtensionLoader extends ExtensionLoader {
@override
void registerAddressFactory() {
Address.setFactory(CompatibleAddressFactory());
}
@override
void registerMetaFactories() {
var mkm = CompatibleMetaFactory(Meta.MKM);
var btc = CompatibleMetaFactory(Meta.BTC);
var eth = CompatibleMetaFactory(Meta.ETH);
Meta.setFactory('1', mkm);
Meta.setFactory('2', btc);
Meta.setFactory('4', eth);
Meta.setFactory('mkm', mkm);
Meta.setFactory('btc', btc);
Meta.setFactory('eth', eth);
Meta.setFactory('MKM', mkm);
Meta.setFactory('BTC', btc);
Meta.setFactory('ETH', eth);
}
@override
void registerContentFactories() {
super.registerContentFactories();
registerCustomizedFactories();
}
void registerCustomizedFactories() {
// Application Customized
var factory = ContentParser((dict) => AppCustomizedContent(dict));
setContentFactory(ContentType.APPLICATION, factory: factory);
setContentFactory(ContentType.CUSTOMIZED, factory: factory);
}
@override
void registerCommandFactories() {
super.registerCommandFactories();
// Handshake
setCommandFactory(HandshakeCommand.HANDSHAKE, creator: (dict) => BaseHandshakeCommand(dict));
}
}You must ensure that every Address you extend has a Meta type that can correspond to it one by one.