dimax 2.4.3 copy "dimax: ^2.4.3" to clipboard
dimax: ^2.4.3 copied to clipboard

DIM Application eXtensions

DIM Application eXtensions (Dart) #

License PRs Welcome Platform Issues Repo Size Tags Version

Watchers Forks Stars Followers

Dependencies #

  • Latest Versions
Name Version Description
Ming Ke Ming (名可名) Version Decentralized User Identity Authentication
Dao Ke Dao (道可道) Version Universal Message Module
DIMP (去中心化通讯协议) Version Decentralized Instant Messaging Protocol

Extensions #

  1. Account
    • Address
      • BTC
      • ETH
    • Meta
      • MKM (Default)
      • BTC
      • ETH
    • Document
      • Visa (User)
      • Profile
      • Bulletin (Group)
  2. Message Contents
    • Text Content
    • File Content
      • Image Content
      • Audio Content
      • Video Content
    • Page Content
    • Name Card
    • Quote Content
    • Money Content
      • Transfer Money
    • Combine Forward
  3. System Commands
    • Meta Command
    • Document Command
    • Receipt Command
    • History Command
    • Group Command
      • Invite
      • Expel
      • Query
      • Quit
      • Join

Examples #

Address #

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;

}

Meta #

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;
  }

}

ExtensionLoader #

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.


Copyright © 2018-2026 Albert Moky Followers

0
likes
60
points
631
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

DIM Application eXtensions

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

dimp

More

Packages that depend on dimax