ScalaによるChordアルゴリズムを利用したDHTの実装のプロトタイプ
Scala
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
project
src
.gitignore
.travis.yml
LICENSE
README.md
scalastyle-config.xml

README.md

P2PScalaProto

A Chord DHT written in Scala using Akka
Build Status

License

See LICENSE. This software is licensed under the Modified BSD License --- aka 3-clause BSD license.

This software uses Akka, which is licensed under the Apache 2 License.

Installing

Generally you do not have to install this software manually: you can use sbt and specify dependency as below.

libraryDependencies +=   "momijikawa" %% "p2pscalaproto" % "0.3.0"

###If you are to install manually

  1. Clone this repository.
  2. install sbt.
  3. Run $ sbt publish-local then you're ready for developing P2P2ch; the software will be installed in your local ivy2 repository.

You should place your own configuration file reference.conf in conf/references/ directory on your project. Configuration options are described below.

reference.conf configuration

Most of configurations are Akka settings; For advanced settings, see Akka Documentation. Akka configurations are placed under p2pakka.akka.*.

Logging level

p2pakka.akka.loglevel={ERROR, WARN, INFO, DEBUG, etc.}

p2pscalaproto peculiar configurations

Automatic port mapping using UPnP

If true, P2PScalaProto attempts to open the specified Akka port on the router using UPnP.

p2pakka.automatic-portmap={true/false}

HOWTO

import momijikawa.p2pscalaproto._
import scala.concurrent.duration._
val chord = new Chord
chord.init(TnodeID.newNodeId) // Give this node ID
chord.join("hogehoge@example.com:22223") // Joining DHT Network
val key = Await.result(chord.put("hoge", "piyopiyo".getBytes.toStream), 10 seconds)
key match {
  case Some(keyval) =>
    println(s"Inserted")
    val data = Await.result(chord.get(key.toSeq), 10 seconds)
    data foreach {
      opt =>
        opt match {
          case Some(data) =>
            println(new String(data.toArray[Byte]))
          case None =>
            println("Failed to read the data.")
        }
    }
}