alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Akka/Scala example source code file (InternetSeedGenerator.scala)

This example Akka source code file (InternetSeedGenerator.scala) is included in my "Source Code Warehouse" project. The intent of this project is to help you more easily find Akka and Scala source code examples by using tags.

All credit for the original source code belongs to akka.io; I'm just trying to make examples easier to find. (For my Scala work, see my Scala examples and tutorials.)

Akka tags/keywords

akka, all, collection, generators, illegalstateexception, instance, internet, internetseedgenerator, list, none, remote, securerandomseedgenerator, security, seedgenerator

The InternetSeedGenerator.scala Akka example source code

// ============================================================================
//   Copyright 2006-2010 Daniel W. Dyer
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
// ============================================================================
package akka.remote.security.provider

import org.uncommons.maths.random.{ SeedGenerator, SeedException, SecureRandomSeedGenerator, RandomDotOrgSeedGenerator, DevRandomSeedGenerator }
import scala.collection.immutable

/**
 * INTERNAL API
 * Seed generator that maintains multiple strategies for seed
 * generation and will delegate to the best one available for the
 * current operating environment.
 * @author Daniel Dyer
 */
object InternetSeedGenerator {
  /**
   * @return The singleton instance of this class.
   */
  def getInstance: InternetSeedGenerator = Instance

  /**Singleton instance. */
  private final val Instance: InternetSeedGenerator = new InternetSeedGenerator
  /**Delegate generators. */
  private final val Generators: immutable.Seq[SeedGenerator] =
    List(new RandomDotOrgSeedGenerator, // first try the Internet seed generator
      new SecureRandomSeedGenerator) // this is last because it always works
}

final class InternetSeedGenerator extends SeedGenerator {
  /**
   * Generates a seed by trying each of the available strategies in
   * turn until one succeeds.  Tries the most suitable strategy first
   * and eventually degrades to the least suitable (but guaranteed to
   * work) strategy.
   * @param length The length (in bytes) of the seed.
   * @return A random seed of the requested length.
   */
  def generateSeed(length: Int): Array[Byte] = InternetSeedGenerator.Generators.view.flatMap(
    g ⇒ try Option(g.generateSeed(length)) catch { case _: SeedException ⇒ None }).headOption.getOrElse(throw new IllegalStateException("All available seed generation strategies failed."))
}

Other Akka source code examples

Here is a short list of links related to this Akka InternetSeedGenerator.scala source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.