diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 95ff090..0000000 --- a/.gitattributes +++ /dev/null @@ -1,17 +0,0 @@ -# Normalize as LF in the repository, OS native locally -* text=auto -*.java text - -# Binary files that should not be modified -*.dat binary -*.db binary -*.gif binary -*.icns binary -*.ico binary -*.jks binary -*.jpg binary -*.key binary -*.png binary -*.ttf binary -*.wav binary -JavaApplicationStub binary diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 8747b69..0000000 --- a/.gitignore +++ /dev/null @@ -1,81 +0,0 @@ -# Build # -######### -MANIFEST.MF -dependency-reduced-pom.xml - -# Compiled # -############ -bin -build -dist -lib -out -run -target -*.com -*.class -*.dll -*.exe -*.o -*.so - -# Databases # -############# -*.db -*.sql -*.sqlite - -# Packages # -############ -*.7z -*.dmg -*.ear -*.gz -*.iso -*.jar -!/gradle/wrapper/gradle-wrapper.jar -*.rar -*.tar -*.war -*.zip - -# Repository # -############## -.git - -# Logging # -########### -/logs -*.log - -# Misc # -######## -*.bak -*.tmp - -# System # -########## -.DS_Store -ehthumbs.db -Thumbs.db - -# Project # -########### -.buildpath -.classpath -.cproject -.externalToolBuilders -.gradle -.idea -.project -.settings -nbproject -atlassian-ide-plugin.xml -build.xml -nb-configuration.xml -*.iml -*.ipr -*.iws -*.launch -*.pydevproject - diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 9bfb976..0000000 --- a/.travis.yml +++ /dev/null @@ -1,58 +0,0 @@ -# Use new Travis-CI infrastructure -sudo: false - -# Source language and JDK version to use -language: java -jdk: oraclejdk8 - -# Use cached Maven dependencies -cache: - directories: - - $HOME/.m2 - -# Pre-install Maven dependencies -install: mvn dependency:go-offline - -# Compile and test source -script: mvn clean -DbuildNumber=$TRAVIS_BUILD_NUMBER -DciSystem=travis -Dcommit=${TRAVIS_COMMIT:0:7} - -# Fetch resources, run deployment goal/task, and generate Javadocs and reports -after_success: - # Get files for use with build, namely the custom Maven settings.xml and scripts - - "git clone https://github.com/flow/travis-ci-resources.git $HOME/build/flow/travis" - # DEVELOP: Check if commit is not a pull request, if repo is official, if branch is not master; then deploy artifacts - - "[[ $TRAVIS_PULL_REQUEST == false ]] && [[ $TRAVIS_REPO_SLUG == flow/network ]] && [[ $TRAVIS_BRANCH == develop ]] && $HOME/build/flow/travis/deploy.sh - # RELEASE: Check if commit is not a pull request, if repo is official, if branch is master; then run deployment script - - "[[ $TRAVIS_PULL_REQUEST == false ]] && [[ $TRAVIS_REPO_SLUG == flow/network ]] && [[ $TRAVIS_BRANCH == master ]] && $HOME/build/flow/travis/deploy.sh && $HOME/build/flow/travis/gh-pages.sh" - # Generate Javadocs and report for Coveralls.io - - "mvn javadoc:javadoc cobertura:cobertura coveralls:report -DserviceJobId=$TRAVIS_JOB_ID" - -# RELEASE: Deploy JARs to GitHub Releases - -deploy: - provider: releases - api-key: $GITHUB_TOKEN - file_glob: true - file: target/flow-network-*.jar - skip_cleanup: true - on: - branch: master - -# Notification services -notifications: - # Disable build status email notifications, until the issue with forks is fixed - email: false - webhooks: - # Send build information and status to Notifico - - http://n.tkte.ch/h/2042/RDqswG16PpWPx1d7RD3Gx7Ka - -# Environmental system variables -env: - global: - # Make the log output cleaner - - TERM=dumb - # Super secure, encrypted variables! Ssssh! - - secure: "Auu6BiJNEI4K22x5Fskki3/bTSiA0VYqd/5Wh8GE86y/upVCcUAmW8dBBJ0VAIhcQjTBbMhxqP+G0K8DbpD8T+OfMEqZbK4kGOZVPEGZ6sHjKvdlKYlMK5g4r6a6+3hI457mWuXSjr4xQ2ar1dGKgOp+1leYwDHU+24IzSjnTHs=" - - secure: "bs6gZ6YT5Rq0oU0F0YRhPVAEZG1rPTAAz6BjNLW0HPus1NflXYMDIOe2HpnjA++N+1jgiYFiIyBkOWRAu3pyJsBEkf9hpOsnEMQcMddrZpzp+Qa4XogKLSOwbUJQNCkx2bUM/UlC0sk3WoRY0F1OoIoewqfuc7+OnV/klV64hNg=" - - secure: "iUTC++/9GL6FBYQYSPPlgZNbcsVztFzMkD1OAm4gVkTOVGvm8QmkP1JUNTNTJqglgvQg/0AzpSP0XPe173svoaqqPW5aEdQ0hO+wAJ51C7PKqimh5hT2j1MhE6IVsOgkSfSeknXBmrN7pRjDu3xTkS/+aCfpMFU5pBDGVuTqUfo=" - - secure: "hCM+d/tIrfCKPvtUyB7oQ1CBR63HvcU8HAQiSCAI5e9Lu+mGllk0qCU/53sE2OTDoQyAnye4/b1Lim6wLWV4bDpLFyH4uVe/oH9TxCpu1pFROY/wIJNBnrqrp80ZPJfDE1wuYT60gn9J5Om6HtWE3exk7Gz+8kPRx5FzfKEaQo8=" diff --git a/HEADER.txt b/HEADER.txt deleted file mode 100644 index 6218055..0000000 --- a/HEADER.txt +++ /dev/null @@ -1,21 +0,0 @@ -This file is part of ${project}, licensed under the MIT License (MIT). - -Copyright (c) ${year} ${name} <${url}/> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 1a63677..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,19 +0,0 @@ -The MIT License (MIT) - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 5abc660..0000000 --- a/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# Flow Network [![License](http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat)][License] [![Flattr this](http://img.shields.io/badge/flattr-donate-lightgrey.svg?style=flat)][Donate] [![Build Status](http://img.shields.io/travis/flow/network/develop.svg?style=flat)](https://travis-ci.org/flow/network) [![Coverage Status](http://img.shields.io/coveralls/flow/network/develop.svg?style=flat)](https://coveralls.io/r/flow/network) - -Network library for the Flow collection. - -## Getting Started -* [Examples and code snippets](https://github.com/flow/examples/tree/master/network) -* [Official documentation](#documentation) -* [IRC support chat](http://kiwiirc.com/client/irc.esper.net/flow) -* [Issues tracker](https://github.com/flow/network/issues) - -## Source Code -The latest and greatest source can be found here on [GitHub](https://github.com/flow/network). If you are using Git, use this command to clone the project: - - git clone git://github.com/flow/network.git - -Or download the latest [development archive](https://github.com/flow/network/archive/develop.zip) or the latest [stable archive](https://github.com/flow/network/archive/master.zip). - -## Dependencies -We love open-source libraries! This project uses are few of them to make things easier. If you aren't using Maven or Gradle, you'll need these! -* [io.netty:netty-all](https://oss.sonatype.org/#nexus-search;gav~io.netty~netty-all~~~) -* [org.slf4j:slf4j-api](https://oss.sonatype.org/#nexus-search;gav~org.slf4j~slf4j-api~~~) - -## Test Dependencies -The following dependencies are only needed if you compiling the tests included with this project. Gotta test 'em all! -* [junit:junit](https://oss.sonatype.org/#nexus-search;gav~junit~junit~~~) -* [org.hamcrest:hamcrest-library](https://oss.sonatype.org/#nexus-search;gav~org.hamcrest~hamcrest-library~~~) -* [org.powermock:powermock-api-mockito](https://oss.sonatype.org/#nexus-search;gav~org.powermock~powermock-api-mockito~~~) -* [org.powermock:powermock-module-junit4](https://oss.sonatype.org/#nexus-search;gav~org.powermock~powermock-module-junit4~~~) - -## Building from Source -This project can be built with the _latest_ [Java Development Kit](http://oracle.com/technetwork/java/javase/downloads) and [Maven](https://maven.apache.org/) or [Gradle](https://www.gradle.org/). Maven and Gradle are used to simplify dependency management, but using either of them is optional. - -For Maven, the command `mvn clean package` will build the project and will put the compiled JAR in `target`, and `mvn clean install` will copy it to your local Maven repository. - -For Gradle, the command `gradlew` will build the project and will put the compiled JAR in `~/build/distributions`, and `gradlew install` will copy it to your local Maven repository. - -## Contributing -Are you a talented programmer looking to contribute some code? We'd love the help! - -* Open a pull request with your changes, following our [guidelines and coding standards](CONTRIBUTING.md). -* Please follow the above guidelines for your pull request(s) accepted. -* For help setting up the project, keep reading! - -Love the project? Feel free to [donate] to help continue development! Flow projects are open-source and powered by community members, like yourself. Without you, we wouldn't be here today! - -Don't forget to watch and star our repo to keep up-to-date with the latest Flow development! - -## Usage -If you're using [Maven](https://maven.apache.org/download.html) to manage project dependencies, simply include the following in your `pom.xml` file: - - - com.flowpowered - flow-network - 1.0.0 - - -If you're using [Gradle](https://www.gradle.org/) to manage project dependencies, simply include the following in your `build.gradle` file: - - repositories { - mavenCentral() - } - dependencies { - compile 'com.flowpowered:flow-network:1.0.0' - } - -If you plan on using snapshots and do not already have the snapshot repo in your repository list, you will need to add this as well: - - https://oss.sonatype.org/content/groups/public/ - -If you'd prefer to manually import the latest .jar file, you can get it [here](https://github.com/flow/network/releases). - -## Documentation -Want to get friendly with the project and put it to good use? Check out the latest [Javadocs](https://flowpowered.com/network). - -To generate Javadocs with Maven, use the `mvn javadoc:javadoc` command. To view the Javadocs simply go to `target/site/apidocs/` and open `index.html` in a web browser. - -To generate Javadocs with Gradle, use the `gradlew javadoc` command. To view the Javadocs simply go to `build/docs/javadoc/` and open `index.html` in a web browser. - -## Version Control -We've adopted the [git flow branching model](http://nvie.com/posts/a-successful-git-branching-model/) in our projects. The creators of git flow released a [short intro video](http://vimeo.com/16018419) to explain the model. - -The `master` branch is production-ready and contains the latest tagged releases. Before a release is made, it is stagged in `release/x` branches before being pushed and tagged in the `master` branch. Small patches from `hotfix/x` branches are also pushed to `master`, and will always have a release version. The `develop` branch is pre-production, and is where we push `feature/x` branches for testing. - -## Legal Stuff -Flow Network is licensed under the [MIT License][License]. Basically, you can do whatever you want as long as you include the original copyright. Please see the `LICENSE.txt` file for details. - -## Credits -* [Spout](https://spout.org/) and contributors - *where we all began, and for much of the re-licensed code.* -* All the people behind [Java](http://www.oracle.com/technetwork/java/index.html), [Maven](https://maven.apache.org/), and [Gradle](https://www.gradle.org/). - -[Donate]: https://flattr.com/submit/auto?user_id=spout&url=https://github.com/flow/network&title=Flow+Network&language=Java&tags=github&category=software -[License]: https://tldrlegal.com/l/mit diff --git a/allclasses-frame.html b/allclasses-frame.html new file mode 100644 index 0000000..7b54152 --- /dev/null +++ b/allclasses-frame.html @@ -0,0 +1,53 @@ + + + + + + +All Classes (Flow Network 1.0.0 API) + + + + + +

All Classes

+
+ +
+ + diff --git a/allclasses-noframe.html b/allclasses-noframe.html new file mode 100644 index 0000000..9e6b382 --- /dev/null +++ b/allclasses-noframe.html @@ -0,0 +1,53 @@ + + + + + + +All Classes (Flow Network 1.0.0 API) + + + + + +

All Classes

+
+ +
+ + diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 8bc8780..0000000 --- a/build.gradle +++ /dev/null @@ -1,216 +0,0 @@ -// Default tasks -defaultTasks 'clean', 'licenseFormat', 'build', 'install' - -// Apply plugins -apply plugin: 'java' -apply plugin: 'cobertura' // Coveralls dependency -apply plugin: 'com.github.kt3k.coveralls' -apply plugin: 'license' -apply plugin: 'maven' -apply plugin: 'signing' - -// Project information -ext.projectName = 'Flow Network' -group = 'com.flowpowered' -archivesBaseName = 'flow-network' -version = '1.0.0' -ext.packaging = 'jar' -ext.inceptionYear = '2013' -ext.url = 'https://flowpowered.com/network' -ext.description = 'Network library for the Flow collection.' - -// Organization information -ext.organization = 'Flow Powered' -ext.organizationUrl = 'https://flowpowered.com' - -// Build properties -ext.buildNumber = project.hasProperty('buildNumber') ? buildNumber : '0' -ext.ciSystem = project.hasProperty('ciSystem') ? ciSystem : 'unknown' -ext.commit = project.hasProperty('commit') ? commit : 'unknown' - -// Build plugin repositories and dependencies -buildscript { - repositories { - mavenLocal() - mavenCentral() - maven { - name = 'sonatype-nexus' - url = 'https://oss.sonatype.org/content/groups/public/' - } - } - dependencies { - classpath 'net.saliman:gradle-cobertura-plugin:2.3.0' // Coveralls dependency - classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.10.0' - classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.4.0x' - } -} - -// Project repositories -repositories { - mavenLocal() - mavenCentral() - maven { - name = 'sonatype-nexus' - url = 'https://oss.sonatype.org/content/groups/public/' - } -} - -// Project dependencies -dependencies { - compile 'io.netty:netty-all:4.0.33.Final' - compile 'org.slf4j:slf4j-api:1.7.18' - testCompile 'junit:junit:4.12' - testCompile 'org.hamcrest:hamcrest-library:1.3' - testCompile 'org.powermock:powermock-api-mockito:1.6.4' - testCompile 'org.powermock:powermock-module-junit4:1.6.4' -} - -// Filter, process, and include resources -processResources { - // Include in final JAR - from(rootProject.rootDir) { - include 'LICENSE.txt' - } -} - -// License header formatting -license { - ext.project = projectName - ext.year = inceptionYear - ext.name = organization - ext.url = organizationUrl - header rootProject.file('HEADER.txt') - ignoreFailures true - strictCheck true - useDefaultMappings false - mapping { java = 'SLASHSTAR_STYLE' } -} - -// Source compiler configuration -configure([compileJava, compileTestJava]) { - sourceCompatibility = '1.7' - targetCompatibility = '1.7' - options.encoding = 'UTF-8' - options.compilerArgs << '-Xlint:all' - options.compilerArgs << '-Xlint:-path' - options.deprecation = true -} - -// JAR manifest configuration -jar.manifest.mainAttributes( - 'Built-By': System.properties['user.name'], - 'Created-By': System.properties['java.vm.version'] + ' (' + System.properties['java.vm.vendor'] + ')', - 'Specification-Title': projectName, - 'Specification-Version': version + '+' + ciSystem + '-b' + buildNumber + '.git-' + commit, - 'Specification-Vendor': organization + ' - ' + organizationUrl) - -// Javadoc doclint configuration -if (JavaVersion.current().isJava8Compatible()) { - allprojects { - tasks.withType(Javadoc) { - options.addStringOption('Xdoclint:none', '-quiet') - } - } -} - -// Coveralls report configuration -cobertura.coverageFormats = ['html', 'xml'] // Coveralls requires xml format - -// Artifact deployment -uploadArchives { - repositories.mavenDeployer { - // Javadoc JAR generation - task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from 'build/docs/javadoc' - } - - // Source JAR generation - task sourcesJar(type: Jar) { - classifier = 'sources' - from sourceSets.main.java.srcDirs - } - - // Set all artifacts - artifacts { - archives jar, javadocJar, sourcesJar - } - - // Tasks and variables based on if release or snapshot - if (version.endsWith('-SNAPSHOT')) { - // Set variable to snapshots repository URL - ext.sonatypeUrl = 'https://oss.sonatype.org/content/repositories/snapshots/' - } else { - // Set variable to releases repository URL - ext.sonatypeUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2/' - - // Artifact signing - signing { - // Sign JAR artifacts - sign configurations.archives - - // Sign Maven POM - beforeDeployment { - org.gradle.api.artifacts.maven.MavenDeployment deployment -> signing.signPom(deployment) - } - } - } - - // Set login credentials for repository - repository(url: sonatypeUrl) { - authentication(userName: System.getenv("sonatypeUsername"), password: System.getenv("sonatypePassword")) - } - - // Maven POM generation - pom.project { - name projectName - artifactId archivesBaseName - packaging packaging - inceptionYear inceptionYear - url url - description project.ext.description - - scm { - connection 'scm:git:git://github.com/flow/network.git' - developerConnection 'scm:git:ssh://git@github.com:flow/network.git' - url 'https://github.com/flow/network' - } - - licenses { - license { - name 'MIT License' - url 'https://tldrlegal.com/l/mit' - distribution 'repo' - } - } - - organization { - name organization - url organizationUrl - } - - developers { - developer { - id 'DDoS' - name 'Aleksi Sapon' - email 'qctechs@gmail.com' - } - developer { - id 'kitskub' - name 'Jack Huey' - email 'kitskub@gmail.com' - } - developer { - id 'Wolf480pl' - name 'Wolf480pl' - email 'wolf480@interia.pl' - } - developer { - id 'lukespragg' - name 'Luke Spragg' - email 'the@wulf.im' - } - } - } - } -} diff --git a/bump.sh b/bump.sh deleted file mode 100755 index 38ec179..0000000 --- a/bump.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -function die_with() { echo "$*" >&2; exit 1; } - -echo "Getting current version from pom.xml" -CURRENT_VERSION="`sed -n 's|.*\(.*\).*|\1|p' pom.xml | awk '{ print $1; exit }'`" -echo "Current version from pom.xml: $CURRENT_VERSION" - -read -p "New version: " NEW_VERSION || die_with "Prompt for new version failed" - -if ! echo $NEW_VERSION | grep -i -- '-SNAPSHOT' >/dev/null; then echo "WARNING: changing to a release version!"; fi - -if [ -f pom.xml ]; then - echo "Updating the project version in pom.xml to $NEW_VERSION" - awk "/${CURRENT_VERSION//./\\.}/{ if (DONE != 1) {gsub(/${CURRENT_VERSION//./\\.}/, \"$NEW_VERSION\"); DONE=1; }} {print;}" < pom.xml > pom.xml.1 && mv -f pom.xml.1 pom.xml || die_with "Failed to update pom.xml!" -fi - -if [ -f build.gradle ]; then - echo "Updating the project version in build.gradle to $NEW_VERSION" - awk "/${CURRENT_VERSION//./\\.}/{ if (DONE != 1) {gsub(/${CURRENT_VERSION//./\\.}/, \"$NEW_VERSION\"); DONE=1; }} {print;}" < build.gradle > build.gradle.1 && mv -f build.gradle.1 build.gradle || die_with "Failed to update build.gradle!" -fi - -if [ -f README.md ]; then - echo "Updating the project version in README.md to $NEW_VERSION" - awk "/${CURRENT_VERSION//./\\.}/{ if (DONE != 1) {gsub(/${CURRENT_VERSION//./\\.}/, \"$NEW_VERSION\"); }} {print;}" < README.md > README.md.1 && mv -f README.md.1 README.md || die_with "Failed to update README.md!" -fi diff --git a/com/flowpowered/network/AsyncableMessage.html b/com/flowpowered/network/AsyncableMessage.html new file mode 100644 index 0000000..9eea080 --- /dev/null +++ b/com/flowpowered/network/AsyncableMessage.html @@ -0,0 +1,239 @@ + + + + + + +AsyncableMessage (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network
+

Interface AsyncableMessage

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/BasicChannelInitializer.html b/com/flowpowered/network/BasicChannelInitializer.html new file mode 100644 index 0000000..09ce522 --- /dev/null +++ b/com/flowpowered/network/BasicChannelInitializer.html @@ -0,0 +1,340 @@ + + + + + + +BasicChannelInitializer (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network
+

Class BasicChannelInitializer

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/Codec.CodecRegistration.html b/com/flowpowered/network/Codec.CodecRegistration.html new file mode 100644 index 0000000..7bc0b70 --- /dev/null +++ b/com/flowpowered/network/Codec.CodecRegistration.html @@ -0,0 +1,326 @@ + + + + + + +Codec.CodecRegistration (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network
+

Class Codec.CodecRegistration

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/Codec.html b/com/flowpowered/network/Codec.html new file mode 100644 index 0000000..d65a00c --- /dev/null +++ b/com/flowpowered/network/Codec.html @@ -0,0 +1,283 @@ + + + + + + +Codec (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network
+

Interface Codec<T extends Message>

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/ConnectionManager.html b/com/flowpowered/network/ConnectionManager.html new file mode 100644 index 0000000..c60a9a2 --- /dev/null +++ b/com/flowpowered/network/ConnectionManager.html @@ -0,0 +1,273 @@ + + + + + + +ConnectionManager (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network
+

Interface ConnectionManager

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/Message.html b/com/flowpowered/network/Message.html new file mode 100644 index 0000000..2da16f9 --- /dev/null +++ b/com/flowpowered/network/Message.html @@ -0,0 +1,272 @@ + + + + + + +Message (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network
+

Interface Message

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/MessageHandler.html b/com/flowpowered/network/MessageHandler.html new file mode 100644 index 0000000..6510b1e --- /dev/null +++ b/com/flowpowered/network/MessageHandler.html @@ -0,0 +1,241 @@ + + + + + + +MessageHandler (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network
+

Interface MessageHandler<S extends Session,T extends Message>

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/NetworkClient.html b/com/flowpowered/network/NetworkClient.html new file mode 100644 index 0000000..adb087b --- /dev/null +++ b/com/flowpowered/network/NetworkClient.html @@ -0,0 +1,373 @@ + + + + + + +NetworkClient (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network
+

Class NetworkClient

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/NetworkServer.html b/com/flowpowered/network/NetworkServer.html new file mode 100644 index 0000000..fa5b6ca --- /dev/null +++ b/com/flowpowered/network/NetworkServer.html @@ -0,0 +1,346 @@ + + + + + + +NetworkServer (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network
+

Class NetworkServer

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/class-use/AsyncableMessage.html b/com/flowpowered/network/class-use/AsyncableMessage.html new file mode 100644 index 0000000..f9f9ee7 --- /dev/null +++ b/com/flowpowered/network/class-use/AsyncableMessage.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Interface com.flowpowered.network.AsyncableMessage (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Interface
com.flowpowered.network.AsyncableMessage

+
+
No usage of com.flowpowered.network.AsyncableMessage
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/class-use/BasicChannelInitializer.html b/com/flowpowered/network/class-use/BasicChannelInitializer.html new file mode 100644 index 0000000..110dece --- /dev/null +++ b/com/flowpowered/network/class-use/BasicChannelInitializer.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.BasicChannelInitializer (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.BasicChannelInitializer

+
+
No usage of com.flowpowered.network.BasicChannelInitializer
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/class-use/Codec.CodecRegistration.html b/com/flowpowered/network/class-use/Codec.CodecRegistration.html new file mode 100644 index 0000000..b6d3929 --- /dev/null +++ b/com/flowpowered/network/class-use/Codec.CodecRegistration.html @@ -0,0 +1,272 @@ + + + + + + +Uses of Class com.flowpowered.network.Codec.CodecRegistration (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.Codec.CodecRegistration

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/class-use/Codec.html b/com/flowpowered/network/class-use/Codec.html new file mode 100644 index 0000000..726f9a0 --- /dev/null +++ b/com/flowpowered/network/class-use/Codec.html @@ -0,0 +1,294 @@ + + + + + + +Uses of Interface com.flowpowered.network.Codec (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Interface
com.flowpowered.network.Codec

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/class-use/ConnectionManager.html b/com/flowpowered/network/class-use/ConnectionManager.html new file mode 100644 index 0000000..8ffbbb4 --- /dev/null +++ b/com/flowpowered/network/class-use/ConnectionManager.html @@ -0,0 +1,207 @@ + + + + + + +Uses of Interface com.flowpowered.network.ConnectionManager (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Interface
com.flowpowered.network.ConnectionManager

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/class-use/Message.html b/com/flowpowered/network/class-use/Message.html new file mode 100644 index 0000000..c982ef1 --- /dev/null +++ b/com/flowpowered/network/class-use/Message.html @@ -0,0 +1,497 @@ + + + + + + +Uses of Interface com.flowpowered.network.Message (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Interface
com.flowpowered.network.Message

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/class-use/MessageHandler.html b/com/flowpowered/network/class-use/MessageHandler.html new file mode 100644 index 0000000..a3fd1fd --- /dev/null +++ b/com/flowpowered/network/class-use/MessageHandler.html @@ -0,0 +1,292 @@ + + + + + + +Uses of Interface com.flowpowered.network.MessageHandler (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Interface
com.flowpowered.network.MessageHandler

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/class-use/NetworkClient.html b/com/flowpowered/network/class-use/NetworkClient.html new file mode 100644 index 0000000..34f9cad --- /dev/null +++ b/com/flowpowered/network/class-use/NetworkClient.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.NetworkClient (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.NetworkClient

+
+
No usage of com.flowpowered.network.NetworkClient
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/class-use/NetworkServer.html b/com/flowpowered/network/class-use/NetworkServer.html new file mode 100644 index 0000000..9ed6192 --- /dev/null +++ b/com/flowpowered/network/class-use/NetworkServer.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.NetworkServer (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.NetworkServer

+
+
No usage of com.flowpowered.network.NetworkServer
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/exception/ChannelClosedException.html b/com/flowpowered/network/exception/ChannelClosedException.html new file mode 100644 index 0000000..8be259b --- /dev/null +++ b/com/flowpowered/network/exception/ChannelClosedException.html @@ -0,0 +1,281 @@ + + + + + + +ChannelClosedException (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.exception
+

Class ChannelClosedException

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/exception/IllegalOpcodeException.html b/com/flowpowered/network/exception/IllegalOpcodeException.html new file mode 100644 index 0000000..b53c9a8 --- /dev/null +++ b/com/flowpowered/network/exception/IllegalOpcodeException.html @@ -0,0 +1,276 @@ + + + + + + +IllegalOpcodeException (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.exception
+

Class IllegalOpcodeException

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/exception/UnknownPacketException.html b/com/flowpowered/network/exception/UnknownPacketException.html new file mode 100644 index 0000000..9e264f7 --- /dev/null +++ b/com/flowpowered/network/exception/UnknownPacketException.html @@ -0,0 +1,320 @@ + + + + + + +UnknownPacketException (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.exception
+

Class UnknownPacketException

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/exception/class-use/ChannelClosedException.html b/com/flowpowered/network/exception/class-use/ChannelClosedException.html new file mode 100644 index 0000000..023f454 --- /dev/null +++ b/com/flowpowered/network/exception/class-use/ChannelClosedException.html @@ -0,0 +1,195 @@ + + + + + + +Uses of Class com.flowpowered.network.exception.ChannelClosedException (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.exception.ChannelClosedException

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/exception/class-use/IllegalOpcodeException.html b/com/flowpowered/network/exception/class-use/IllegalOpcodeException.html new file mode 100644 index 0000000..3774f82 --- /dev/null +++ b/com/flowpowered/network/exception/class-use/IllegalOpcodeException.html @@ -0,0 +1,168 @@ + + + + + + +Uses of Class com.flowpowered.network.exception.IllegalOpcodeException (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.exception.IllegalOpcodeException

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/exception/class-use/UnknownPacketException.html b/com/flowpowered/network/exception/class-use/UnknownPacketException.html new file mode 100644 index 0000000..b6f956c --- /dev/null +++ b/com/flowpowered/network/exception/class-use/UnknownPacketException.html @@ -0,0 +1,168 @@ + + + + + + +Uses of Class com.flowpowered.network.exception.UnknownPacketException (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.exception.UnknownPacketException

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/exception/package-frame.html b/com/flowpowered/network/exception/package-frame.html new file mode 100644 index 0000000..9b45d7d --- /dev/null +++ b/com/flowpowered/network/exception/package-frame.html @@ -0,0 +1,23 @@ + + + + + + +com.flowpowered.network.exception (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network.exception

+
+

Exceptions

+ +
+ + diff --git a/com/flowpowered/network/exception/package-summary.html b/com/flowpowered/network/exception/package-summary.html new file mode 100644 index 0000000..5355c59 --- /dev/null +++ b/com/flowpowered/network/exception/package-summary.html @@ -0,0 +1,154 @@ + + + + + + +com.flowpowered.network.exception (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network.exception

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/exception/package-tree.html b/com/flowpowered/network/exception/package-tree.html new file mode 100644 index 0000000..a8ec444 --- /dev/null +++ b/com/flowpowered/network/exception/package-tree.html @@ -0,0 +1,153 @@ + + + + + + +com.flowpowered.network.exception Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network.exception

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/exception/package-use.html b/com/flowpowered/network/exception/package-use.html new file mode 100644 index 0000000..630365a --- /dev/null +++ b/com/flowpowered/network/exception/package-use.html @@ -0,0 +1,199 @@ + + + + + + +Uses of Package com.flowpowered.network.exception (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network.exception

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/package-frame.html b/com/flowpowered/network/package-frame.html new file mode 100644 index 0000000..d30902d --- /dev/null +++ b/com/flowpowered/network/package-frame.html @@ -0,0 +1,32 @@ + + + + + + +com.flowpowered.network (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network

+
+

Interfaces

+ +

Classes

+ +
+ + diff --git a/com/flowpowered/network/package-summary.html b/com/flowpowered/network/package-summary.html new file mode 100644 index 0000000..42a8306 --- /dev/null +++ b/com/flowpowered/network/package-summary.html @@ -0,0 +1,201 @@ + + + + + + +com.flowpowered.network (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/package-tree.html b/com/flowpowered/network/package-tree.html new file mode 100644 index 0000000..59b1b2c --- /dev/null +++ b/com/flowpowered/network/package-tree.html @@ -0,0 +1,165 @@ + + + + + + +com.flowpowered.network Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/package-use.html b/com/flowpowered/network/package-use.html new file mode 100644 index 0000000..962a523 --- /dev/null +++ b/com/flowpowered/network/package-use.html @@ -0,0 +1,380 @@ + + + + + + +Uses of Package com.flowpowered.network (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/MessageDecoder.html b/com/flowpowered/network/pipeline/MessageDecoder.html new file mode 100644 index 0000000..dff26e6 --- /dev/null +++ b/com/flowpowered/network/pipeline/MessageDecoder.html @@ -0,0 +1,381 @@ + + + + + + +MessageDecoder (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.pipeline
+

Class MessageDecoder

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/MessageEncoder.html b/com/flowpowered/network/pipeline/MessageEncoder.html new file mode 100644 index 0000000..94c3e59 --- /dev/null +++ b/com/flowpowered/network/pipeline/MessageEncoder.html @@ -0,0 +1,347 @@ + + + + + + +MessageEncoder (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.pipeline
+

Class MessageEncoder

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/MessageHandler.html b/com/flowpowered/network/pipeline/MessageHandler.html new file mode 100644 index 0000000..74b3d6f --- /dev/null +++ b/com/flowpowered/network/pipeline/MessageHandler.html @@ -0,0 +1,432 @@ + + + + + + +MessageHandler (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.pipeline
+

Class MessageHandler

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/MessageProcessorDecoder.html b/com/flowpowered/network/pipeline/MessageProcessorDecoder.html new file mode 100644 index 0000000..865f9c4 --- /dev/null +++ b/com/flowpowered/network/pipeline/MessageProcessorDecoder.html @@ -0,0 +1,381 @@ + + + + + + +MessageProcessorDecoder (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.pipeline
+

Class MessageProcessorDecoder

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/MessageProcessorEncoder.html b/com/flowpowered/network/pipeline/MessageProcessorEncoder.html new file mode 100644 index 0000000..8602e79 --- /dev/null +++ b/com/flowpowered/network/pipeline/MessageProcessorEncoder.html @@ -0,0 +1,360 @@ + + + + + + +MessageProcessorEncoder (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.pipeline
+

Class MessageProcessorEncoder

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/class-use/MessageDecoder.html b/com/flowpowered/network/pipeline/class-use/MessageDecoder.html new file mode 100644 index 0000000..9a1a8f5 --- /dev/null +++ b/com/flowpowered/network/pipeline/class-use/MessageDecoder.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.pipeline.MessageDecoder (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.pipeline.MessageDecoder

+
+
No usage of com.flowpowered.network.pipeline.MessageDecoder
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/class-use/MessageEncoder.html b/com/flowpowered/network/pipeline/class-use/MessageEncoder.html new file mode 100644 index 0000000..38e832e --- /dev/null +++ b/com/flowpowered/network/pipeline/class-use/MessageEncoder.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.pipeline.MessageEncoder (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.pipeline.MessageEncoder

+
+
No usage of com.flowpowered.network.pipeline.MessageEncoder
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/class-use/MessageHandler.html b/com/flowpowered/network/pipeline/class-use/MessageHandler.html new file mode 100644 index 0000000..ce8d43e --- /dev/null +++ b/com/flowpowered/network/pipeline/class-use/MessageHandler.html @@ -0,0 +1,173 @@ + + + + + + +Uses of Class com.flowpowered.network.pipeline.MessageHandler (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.pipeline.MessageHandler

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/class-use/MessageProcessorDecoder.html b/com/flowpowered/network/pipeline/class-use/MessageProcessorDecoder.html new file mode 100644 index 0000000..d5a106f --- /dev/null +++ b/com/flowpowered/network/pipeline/class-use/MessageProcessorDecoder.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.pipeline.MessageProcessorDecoder (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.pipeline.MessageProcessorDecoder

+
+
No usage of com.flowpowered.network.pipeline.MessageProcessorDecoder
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/class-use/MessageProcessorEncoder.html b/com/flowpowered/network/pipeline/class-use/MessageProcessorEncoder.html new file mode 100644 index 0000000..3523460 --- /dev/null +++ b/com/flowpowered/network/pipeline/class-use/MessageProcessorEncoder.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.pipeline.MessageProcessorEncoder (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.pipeline.MessageProcessorEncoder

+
+
No usage of com.flowpowered.network.pipeline.MessageProcessorEncoder
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/package-frame.html b/com/flowpowered/network/pipeline/package-frame.html new file mode 100644 index 0000000..e4b62e0 --- /dev/null +++ b/com/flowpowered/network/pipeline/package-frame.html @@ -0,0 +1,25 @@ + + + + + + +com.flowpowered.network.pipeline (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network.pipeline

+
+

Classes

+ +
+ + diff --git a/com/flowpowered/network/pipeline/package-summary.html b/com/flowpowered/network/pipeline/package-summary.html new file mode 100644 index 0000000..4653637 --- /dev/null +++ b/com/flowpowered/network/pipeline/package-summary.html @@ -0,0 +1,168 @@ + + + + + + +com.flowpowered.network.pipeline (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network.pipeline

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/package-tree.html b/com/flowpowered/network/pipeline/package-tree.html new file mode 100644 index 0000000..4b2af99 --- /dev/null +++ b/com/flowpowered/network/pipeline/package-tree.html @@ -0,0 +1,171 @@ + + + + + + +com.flowpowered.network.pipeline Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network.pipeline

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/pipeline/package-use.html b/com/flowpowered/network/pipeline/package-use.html new file mode 100644 index 0000000..e23782e --- /dev/null +++ b/com/flowpowered/network/pipeline/package-use.html @@ -0,0 +1,161 @@ + + + + + + +Uses of Package com.flowpowered.network.pipeline (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network.pipeline

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/processor/MessageProcessor.html b/com/flowpowered/network/processor/MessageProcessor.html new file mode 100644 index 0000000..bca8fd3 --- /dev/null +++ b/com/flowpowered/network/processor/MessageProcessor.html @@ -0,0 +1,279 @@ + + + + + + +MessageProcessor (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.processor
+

Interface MessageProcessor

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/processor/class-use/MessageProcessor.html b/com/flowpowered/network/processor/class-use/MessageProcessor.html new file mode 100644 index 0000000..bff2ae4 --- /dev/null +++ b/com/flowpowered/network/processor/class-use/MessageProcessor.html @@ -0,0 +1,220 @@ + + + + + + +Uses of Interface com.flowpowered.network.processor.MessageProcessor (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Interface
com.flowpowered.network.processor.MessageProcessor

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/processor/package-frame.html b/com/flowpowered/network/processor/package-frame.html new file mode 100644 index 0000000..d85e62e --- /dev/null +++ b/com/flowpowered/network/processor/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.flowpowered.network.processor (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network.processor

+
+

Interfaces

+ +
+ + diff --git a/com/flowpowered/network/processor/package-summary.html b/com/flowpowered/network/processor/package-summary.html new file mode 100644 index 0000000..daf5e04 --- /dev/null +++ b/com/flowpowered/network/processor/package-summary.html @@ -0,0 +1,147 @@ + + + + + + +com.flowpowered.network.processor (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network.processor

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/processor/package-tree.html b/com/flowpowered/network/processor/package-tree.html new file mode 100644 index 0000000..3ccb7fa --- /dev/null +++ b/com/flowpowered/network/processor/package-tree.html @@ -0,0 +1,135 @@ + + + + + + +com.flowpowered.network.processor Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network.processor

+Package Hierarchies: + +
+
+

Interface Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/processor/package-use.html b/com/flowpowered/network/processor/package-use.html new file mode 100644 index 0000000..b22336d --- /dev/null +++ b/com/flowpowered/network/processor/package-use.html @@ -0,0 +1,206 @@ + + + + + + +Uses of Package com.flowpowered.network.processor (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network.processor

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/processor/simple/SimpleMessageProcessor.html b/com/flowpowered/network/processor/simple/SimpleMessageProcessor.html new file mode 100644 index 0000000..0f372f1 --- /dev/null +++ b/com/flowpowered/network/processor/simple/SimpleMessageProcessor.html @@ -0,0 +1,461 @@ + + + + + + +SimpleMessageProcessor (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.processor.simple
+

Class SimpleMessageProcessor

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/processor/simple/class-use/SimpleMessageProcessor.html b/com/flowpowered/network/processor/simple/class-use/SimpleMessageProcessor.html new file mode 100644 index 0000000..f9e802e --- /dev/null +++ b/com/flowpowered/network/processor/simple/class-use/SimpleMessageProcessor.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.processor.simple.SimpleMessageProcessor (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.processor.simple.SimpleMessageProcessor

+
+
No usage of com.flowpowered.network.processor.simple.SimpleMessageProcessor
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/processor/simple/package-frame.html b/com/flowpowered/network/processor/simple/package-frame.html new file mode 100644 index 0000000..bfbb06e --- /dev/null +++ b/com/flowpowered/network/processor/simple/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.flowpowered.network.processor.simple (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network.processor.simple

+
+

Classes

+ +
+ + diff --git a/com/flowpowered/network/processor/simple/package-summary.html b/com/flowpowered/network/processor/simple/package-summary.html new file mode 100644 index 0000000..5572a73 --- /dev/null +++ b/com/flowpowered/network/processor/simple/package-summary.html @@ -0,0 +1,146 @@ + + + + + + +com.flowpowered.network.processor.simple (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network.processor.simple

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/processor/simple/package-tree.html b/com/flowpowered/network/processor/simple/package-tree.html new file mode 100644 index 0000000..6eb2eba --- /dev/null +++ b/com/flowpowered/network/processor/simple/package-tree.html @@ -0,0 +1,139 @@ + + + + + + +com.flowpowered.network.processor.simple Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network.processor.simple

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/processor/simple/package-use.html b/com/flowpowered/network/processor/simple/package-use.html new file mode 100644 index 0000000..5b20aec --- /dev/null +++ b/com/flowpowered/network/processor/simple/package-use.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Package com.flowpowered.network.processor.simple (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network.processor.simple

+
+
No usage of com.flowpowered.network.processor.simple
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/AbstractProtocol.html b/com/flowpowered/network/protocol/AbstractProtocol.html new file mode 100644 index 0000000..ed490e8 --- /dev/null +++ b/com/flowpowered/network/protocol/AbstractProtocol.html @@ -0,0 +1,379 @@ + + + + + + +AbstractProtocol (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.protocol
+

Class AbstractProtocol

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/Protocol.html b/com/flowpowered/network/protocol/Protocol.html new file mode 100644 index 0000000..38e0d3d --- /dev/null +++ b/com/flowpowered/network/protocol/Protocol.html @@ -0,0 +1,308 @@ + + + + + + +Protocol (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.protocol
+

Interface Protocol

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/ProtocolRegistry.html b/com/flowpowered/network/protocol/ProtocolRegistry.html new file mode 100644 index 0000000..1e240c2 --- /dev/null +++ b/com/flowpowered/network/protocol/ProtocolRegistry.html @@ -0,0 +1,349 @@ + + + + + + +ProtocolRegistry (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.protocol
+

Class ProtocolRegistry<T extends Protocol>

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/class-use/AbstractProtocol.html b/com/flowpowered/network/protocol/class-use/AbstractProtocol.html new file mode 100644 index 0000000..d9216fd --- /dev/null +++ b/com/flowpowered/network/protocol/class-use/AbstractProtocol.html @@ -0,0 +1,247 @@ + + + + + + +Uses of Class com.flowpowered.network.protocol.AbstractProtocol (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.protocol.AbstractProtocol

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/class-use/Protocol.html b/com/flowpowered/network/protocol/class-use/Protocol.html new file mode 100644 index 0000000..6bb571e --- /dev/null +++ b/com/flowpowered/network/protocol/class-use/Protocol.html @@ -0,0 +1,255 @@ + + + + + + +Uses of Interface com.flowpowered.network.protocol.Protocol (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Interface
com.flowpowered.network.protocol.Protocol

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/class-use/ProtocolRegistry.html b/com/flowpowered/network/protocol/class-use/ProtocolRegistry.html new file mode 100644 index 0000000..779bbf0 --- /dev/null +++ b/com/flowpowered/network/protocol/class-use/ProtocolRegistry.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.protocol.ProtocolRegistry (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.protocol.ProtocolRegistry

+
+
No usage of com.flowpowered.network.protocol.ProtocolRegistry
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/keyed/KeyedProtocol.html b/com/flowpowered/network/protocol/keyed/KeyedProtocol.html new file mode 100644 index 0000000..1dcbed3 --- /dev/null +++ b/com/flowpowered/network/protocol/keyed/KeyedProtocol.html @@ -0,0 +1,374 @@ + + + + + + +KeyedProtocol (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.protocol.keyed
+

Class KeyedProtocol

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/keyed/class-use/KeyedProtocol.html b/com/flowpowered/network/protocol/keyed/class-use/KeyedProtocol.html new file mode 100644 index 0000000..b7af16d --- /dev/null +++ b/com/flowpowered/network/protocol/keyed/class-use/KeyedProtocol.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.protocol.keyed.KeyedProtocol (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.protocol.keyed.KeyedProtocol

+
+
No usage of com.flowpowered.network.protocol.keyed.KeyedProtocol
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/keyed/package-frame.html b/com/flowpowered/network/protocol/keyed/package-frame.html new file mode 100644 index 0000000..0fd3728 --- /dev/null +++ b/com/flowpowered/network/protocol/keyed/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.flowpowered.network.protocol.keyed (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network.protocol.keyed

+
+

Classes

+ +
+ + diff --git a/com/flowpowered/network/protocol/keyed/package-summary.html b/com/flowpowered/network/protocol/keyed/package-summary.html new file mode 100644 index 0000000..f9bc855 --- /dev/null +++ b/com/flowpowered/network/protocol/keyed/package-summary.html @@ -0,0 +1,146 @@ + + + + + + +com.flowpowered.network.protocol.keyed (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network.protocol.keyed

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/keyed/package-tree.html b/com/flowpowered/network/protocol/keyed/package-tree.html new file mode 100644 index 0000000..576145a --- /dev/null +++ b/com/flowpowered/network/protocol/keyed/package-tree.html @@ -0,0 +1,143 @@ + + + + + + +com.flowpowered.network.protocol.keyed Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network.protocol.keyed

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/keyed/package-use.html b/com/flowpowered/network/protocol/keyed/package-use.html new file mode 100644 index 0000000..0cee2f5 --- /dev/null +++ b/com/flowpowered/network/protocol/keyed/package-use.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Package com.flowpowered.network.protocol.keyed (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network.protocol.keyed

+
+
No usage of com.flowpowered.network.protocol.keyed
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/package-frame.html b/com/flowpowered/network/protocol/package-frame.html new file mode 100644 index 0000000..021ac8c --- /dev/null +++ b/com/flowpowered/network/protocol/package-frame.html @@ -0,0 +1,26 @@ + + + + + + +com.flowpowered.network.protocol (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network.protocol

+
+

Interfaces

+ +

Classes

+ +
+ + diff --git a/com/flowpowered/network/protocol/package-summary.html b/com/flowpowered/network/protocol/package-summary.html new file mode 100644 index 0000000..c0be879 --- /dev/null +++ b/com/flowpowered/network/protocol/package-summary.html @@ -0,0 +1,167 @@ + + + + + + +com.flowpowered.network.protocol (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network.protocol

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/package-tree.html b/com/flowpowered/network/protocol/package-tree.html new file mode 100644 index 0000000..79c0b4d --- /dev/null +++ b/com/flowpowered/network/protocol/package-tree.html @@ -0,0 +1,144 @@ + + + + + + +com.flowpowered.network.protocol Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network.protocol

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/package-use.html b/com/flowpowered/network/protocol/package-use.html new file mode 100644 index 0000000..7603aa4 --- /dev/null +++ b/com/flowpowered/network/protocol/package-use.html @@ -0,0 +1,231 @@ + + + + + + +Uses of Package com.flowpowered.network.protocol (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network.protocol

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/simple/SimpleProtocol.html b/com/flowpowered/network/protocol/simple/SimpleProtocol.html new file mode 100644 index 0000000..c468b4e --- /dev/null +++ b/com/flowpowered/network/protocol/simple/SimpleProtocol.html @@ -0,0 +1,414 @@ + + + + + + +SimpleProtocol (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.protocol.simple
+

Class SimpleProtocol

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/simple/class-use/SimpleProtocol.html b/com/flowpowered/network/protocol/simple/class-use/SimpleProtocol.html new file mode 100644 index 0000000..9ecf38d --- /dev/null +++ b/com/flowpowered/network/protocol/simple/class-use/SimpleProtocol.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.protocol.simple.SimpleProtocol (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.protocol.simple.SimpleProtocol

+
+
No usage of com.flowpowered.network.protocol.simple.SimpleProtocol
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/simple/package-frame.html b/com/flowpowered/network/protocol/simple/package-frame.html new file mode 100644 index 0000000..a379d5a --- /dev/null +++ b/com/flowpowered/network/protocol/simple/package-frame.html @@ -0,0 +1,21 @@ + + + + + + +com.flowpowered.network.protocol.simple (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network.protocol.simple

+
+

Classes

+ +
+ + diff --git a/com/flowpowered/network/protocol/simple/package-summary.html b/com/flowpowered/network/protocol/simple/package-summary.html new file mode 100644 index 0000000..3d2dfd4 --- /dev/null +++ b/com/flowpowered/network/protocol/simple/package-summary.html @@ -0,0 +1,146 @@ + + + + + + +com.flowpowered.network.protocol.simple (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network.protocol.simple

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/simple/package-tree.html b/com/flowpowered/network/protocol/simple/package-tree.html new file mode 100644 index 0000000..b7ba01d --- /dev/null +++ b/com/flowpowered/network/protocol/simple/package-tree.html @@ -0,0 +1,143 @@ + + + + + + +com.flowpowered.network.protocol.simple Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network.protocol.simple

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/protocol/simple/package-use.html b/com/flowpowered/network/protocol/simple/package-use.html new file mode 100644 index 0000000..511c10d --- /dev/null +++ b/com/flowpowered/network/protocol/simple/package-use.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Package com.flowpowered.network.protocol.simple (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network.protocol.simple

+
+
No usage of com.flowpowered.network.protocol.simple
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/service/CodecLookupService.html b/com/flowpowered/network/service/CodecLookupService.html new file mode 100644 index 0000000..4b88fc7 --- /dev/null +++ b/com/flowpowered/network/service/CodecLookupService.html @@ -0,0 +1,374 @@ + + + + + + +CodecLookupService (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.service
+

Class CodecLookupService

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/service/HandlerLookupService.html b/com/flowpowered/network/service/HandlerLookupService.html new file mode 100644 index 0000000..5c21d03 --- /dev/null +++ b/com/flowpowered/network/service/HandlerLookupService.html @@ -0,0 +1,312 @@ + + + + + + +HandlerLookupService (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.service
+

Class HandlerLookupService

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/service/class-use/CodecLookupService.html b/com/flowpowered/network/service/class-use/CodecLookupService.html new file mode 100644 index 0000000..7b567e7 --- /dev/null +++ b/com/flowpowered/network/service/class-use/CodecLookupService.html @@ -0,0 +1,192 @@ + + + + + + +Uses of Class com.flowpowered.network.service.CodecLookupService (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.service.CodecLookupService

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/service/class-use/HandlerLookupService.html b/com/flowpowered/network/service/class-use/HandlerLookupService.html new file mode 100644 index 0000000..b018f62 --- /dev/null +++ b/com/flowpowered/network/service/class-use/HandlerLookupService.html @@ -0,0 +1,192 @@ + + + + + + +Uses of Class com.flowpowered.network.service.HandlerLookupService (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.service.HandlerLookupService

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/service/package-frame.html b/com/flowpowered/network/service/package-frame.html new file mode 100644 index 0000000..e60ce49 --- /dev/null +++ b/com/flowpowered/network/service/package-frame.html @@ -0,0 +1,22 @@ + + + + + + +com.flowpowered.network.service (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network.service

+
+

Classes

+ +
+ + diff --git a/com/flowpowered/network/service/package-summary.html b/com/flowpowered/network/service/package-summary.html new file mode 100644 index 0000000..87e1efa --- /dev/null +++ b/com/flowpowered/network/service/package-summary.html @@ -0,0 +1,150 @@ + + + + + + +com.flowpowered.network.service (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network.service

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/service/package-tree.html b/com/flowpowered/network/service/package-tree.html new file mode 100644 index 0000000..5896d5e --- /dev/null +++ b/com/flowpowered/network/service/package-tree.html @@ -0,0 +1,140 @@ + + + + + + +com.flowpowered.network.service Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network.service

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/service/package-use.html b/com/flowpowered/network/service/package-use.html new file mode 100644 index 0000000..69f9e9b --- /dev/null +++ b/com/flowpowered/network/service/package-use.html @@ -0,0 +1,188 @@ + + + + + + +Uses of Package com.flowpowered.network.service (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network.service

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/BasicSession.html b/com/flowpowered/network/session/BasicSession.html new file mode 100644 index 0000000..fafd161 --- /dev/null +++ b/com/flowpowered/network/session/BasicSession.html @@ -0,0 +1,665 @@ + + + + + + +BasicSession (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.session
+

Class BasicSession

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/PulsingSession.SendType.html b/com/flowpowered/network/session/PulsingSession.SendType.html new file mode 100644 index 0000000..ef87e5b --- /dev/null +++ b/com/flowpowered/network/session/PulsingSession.SendType.html @@ -0,0 +1,370 @@ + + + + + + +PulsingSession.SendType (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.session
+

Enum PulsingSession.SendType

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/PulsingSession.State.html b/com/flowpowered/network/session/PulsingSession.State.html new file mode 100644 index 0000000..1c52b79 --- /dev/null +++ b/com/flowpowered/network/session/PulsingSession.State.html @@ -0,0 +1,404 @@ + + + + + + +PulsingSession.State (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.session
+

Enum PulsingSession.State

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/PulsingSession.html b/com/flowpowered/network/session/PulsingSession.html new file mode 100644 index 0000000..2f13c81 --- /dev/null +++ b/com/flowpowered/network/session/PulsingSession.html @@ -0,0 +1,476 @@ + + + + + + +PulsingSession (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.session
+

Class PulsingSession

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/Session.html b/com/flowpowered/network/session/Session.html new file mode 100644 index 0000000..8d6354a --- /dev/null +++ b/com/flowpowered/network/session/Session.html @@ -0,0 +1,399 @@ + + + + + + +Session (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.session
+

Interface Session

+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/class-use/BasicSession.html b/com/flowpowered/network/session/class-use/BasicSession.html new file mode 100644 index 0000000..374059a --- /dev/null +++ b/com/flowpowered/network/session/class-use/BasicSession.html @@ -0,0 +1,168 @@ + + + + + + +Uses of Class com.flowpowered.network.session.BasicSession (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.session.BasicSession

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/class-use/PulsingSession.SendType.html b/com/flowpowered/network/session/class-use/PulsingSession.SendType.html new file mode 100644 index 0000000..dcc24b6 --- /dev/null +++ b/com/flowpowered/network/session/class-use/PulsingSession.SendType.html @@ -0,0 +1,194 @@ + + + + + + +Uses of Class com.flowpowered.network.session.PulsingSession.SendType (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.session.PulsingSession.SendType

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/class-use/PulsingSession.State.html b/com/flowpowered/network/session/class-use/PulsingSession.State.html new file mode 100644 index 0000000..3afd64e --- /dev/null +++ b/com/flowpowered/network/session/class-use/PulsingSession.State.html @@ -0,0 +1,196 @@ + + + + + + +Uses of Class com.flowpowered.network.session.PulsingSession.State (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.session.PulsingSession.State

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/class-use/PulsingSession.html b/com/flowpowered/network/session/class-use/PulsingSession.html new file mode 100644 index 0000000..d38fb50 --- /dev/null +++ b/com/flowpowered/network/session/class-use/PulsingSession.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.session.PulsingSession (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.session.PulsingSession

+
+
No usage of com.flowpowered.network.session.PulsingSession
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/class-use/Session.html b/com/flowpowered/network/session/class-use/Session.html new file mode 100644 index 0000000..0617fa7 --- /dev/null +++ b/com/flowpowered/network/session/class-use/Session.html @@ -0,0 +1,250 @@ + + + + + + +Uses of Interface com.flowpowered.network.session.Session (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Interface
com.flowpowered.network.session.Session

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/package-frame.html b/com/flowpowered/network/session/package-frame.html new file mode 100644 index 0000000..7b13c60 --- /dev/null +++ b/com/flowpowered/network/session/package-frame.html @@ -0,0 +1,31 @@ + + + + + + +com.flowpowered.network.session (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network.session

+
+

Interfaces

+ +

Classes

+ +

Enums

+ +
+ + diff --git a/com/flowpowered/network/session/package-summary.html b/com/flowpowered/network/session/package-summary.html new file mode 100644 index 0000000..85cd588 --- /dev/null +++ b/com/flowpowered/network/session/package-summary.html @@ -0,0 +1,190 @@ + + + + + + +com.flowpowered.network.session (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network.session

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/package-tree.html b/com/flowpowered/network/session/package-tree.html new file mode 100644 index 0000000..f780590 --- /dev/null +++ b/com/flowpowered/network/session/package-tree.html @@ -0,0 +1,160 @@ + + + + + + +com.flowpowered.network.session Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network.session

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +

Enum Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/session/package-use.html b/com/flowpowered/network/session/package-use.html new file mode 100644 index 0000000..810e524 --- /dev/null +++ b/com/flowpowered/network/session/package-use.html @@ -0,0 +1,195 @@ + + + + + + +Uses of Package com.flowpowered.network.session (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network.session

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/util/AnnotatedMessageHandler.Handle.html b/com/flowpowered/network/util/AnnotatedMessageHandler.Handle.html new file mode 100644 index 0000000..ea6c834 --- /dev/null +++ b/com/flowpowered/network/util/AnnotatedMessageHandler.Handle.html @@ -0,0 +1,168 @@ + + + + + + +AnnotatedMessageHandler.Handle (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.util
+

Annotation Type AnnotatedMessageHandler.Handle

+
+
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/util/AnnotatedMessageHandler.html b/com/flowpowered/network/util/AnnotatedMessageHandler.html new file mode 100644 index 0000000..3db9778 --- /dev/null +++ b/com/flowpowered/network/util/AnnotatedMessageHandler.html @@ -0,0 +1,313 @@ + + + + + + +AnnotatedMessageHandler (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.util
+

Class AnnotatedMessageHandler

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/util/ByteBufUtils.html b/com/flowpowered/network/util/ByteBufUtils.html new file mode 100644 index 0000000..3692f36 --- /dev/null +++ b/com/flowpowered/network/util/ByteBufUtils.html @@ -0,0 +1,408 @@ + + + + + + +ByteBufUtils (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + + +
+
com.flowpowered.network.util
+

Class ByteBufUtils

+
+
+ +
+ +
+
+ +
+
+ +
+
+ + +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/util/class-use/AnnotatedMessageHandler.Handle.html b/com/flowpowered/network/util/class-use/AnnotatedMessageHandler.Handle.html new file mode 100644 index 0000000..d06b0ff --- /dev/null +++ b/com/flowpowered/network/util/class-use/AnnotatedMessageHandler.Handle.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.util.AnnotatedMessageHandler.Handle (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.util.AnnotatedMessageHandler.Handle

+
+
No usage of com.flowpowered.network.util.AnnotatedMessageHandler.Handle
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/util/class-use/AnnotatedMessageHandler.html b/com/flowpowered/network/util/class-use/AnnotatedMessageHandler.html new file mode 100644 index 0000000..f452f9f --- /dev/null +++ b/com/flowpowered/network/util/class-use/AnnotatedMessageHandler.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.util.AnnotatedMessageHandler (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.util.AnnotatedMessageHandler

+
+
No usage of com.flowpowered.network.util.AnnotatedMessageHandler
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/util/class-use/ByteBufUtils.html b/com/flowpowered/network/util/class-use/ByteBufUtils.html new file mode 100644 index 0000000..47ef229 --- /dev/null +++ b/com/flowpowered/network/util/class-use/ByteBufUtils.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Class com.flowpowered.network.util.ByteBufUtils (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Class
com.flowpowered.network.util.ByteBufUtils

+
+
No usage of com.flowpowered.network.util.ByteBufUtils
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/util/package-frame.html b/com/flowpowered/network/util/package-frame.html new file mode 100644 index 0000000..4ca5211 --- /dev/null +++ b/com/flowpowered/network/util/package-frame.html @@ -0,0 +1,26 @@ + + + + + + +com.flowpowered.network.util (Flow Network 1.0.0 API) + + + + + +

com.flowpowered.network.util

+
+

Classes

+ +

Annotation Types

+ +
+ + diff --git a/com/flowpowered/network/util/package-summary.html b/com/flowpowered/network/util/package-summary.html new file mode 100644 index 0000000..af81178 --- /dev/null +++ b/com/flowpowered/network/util/package-summary.html @@ -0,0 +1,169 @@ + + + + + + +com.flowpowered.network.util (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Package com.flowpowered.network.util

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/util/package-tree.html b/com/flowpowered/network/util/package-tree.html new file mode 100644 index 0000000..c14e4d9 --- /dev/null +++ b/com/flowpowered/network/util/package-tree.html @@ -0,0 +1,144 @@ + + + + + + +com.flowpowered.network.util Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For Package com.flowpowered.network.util

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Annotation Type Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/com/flowpowered/network/util/package-use.html b/com/flowpowered/network/util/package-use.html new file mode 100644 index 0000000..8cbca92 --- /dev/null +++ b/com/flowpowered/network/util/package-use.html @@ -0,0 +1,126 @@ + + + + + + +Uses of Package com.flowpowered.network.util (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Uses of Package
com.flowpowered.network.util

+
+
No usage of com.flowpowered.network.util
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/constant-values.html b/constant-values.html new file mode 100644 index 0000000..230bc5a --- /dev/null +++ b/constant-values.html @@ -0,0 +1,126 @@ + + + + + + +Constant Field Values (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Constant Field Values

+

Contents

+
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/deprecated-list.html b/deprecated-list.html new file mode 100644 index 0000000..b8d24d2 --- /dev/null +++ b/deprecated-list.html @@ -0,0 +1,126 @@ + + + + + + +Deprecated List (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Deprecated API

+

Contents

+
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/gradle.properties b/gradle.properties deleted file mode 100644 index 0a836bd..0000000 --- a/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -signing.keyId= -signing.password= -signing.secretKeyRingFile= -sonatypeUsername= -sonatypePassword= diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 667288a..0000000 Binary files a/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index e17acdd..0000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-2.6-all.zip diff --git a/gradlew b/gradlew deleted file mode 100755 index 91a7e26..0000000 --- a/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index 8a0b282..0000000 --- a/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/help-doc.html b/help-doc.html new file mode 100644 index 0000000..4d54e61 --- /dev/null +++ b/help-doc.html @@ -0,0 +1,231 @@ + + + + + + +API Help (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+ +This help file applies to API documentation generated using the standard doclet.
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/index-all.html b/index-all.html new file mode 100644 index 0000000..9398077 --- /dev/null +++ b/index-all.html @@ -0,0 +1,820 @@ + + + + + + +Index (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
A B C D E F G H I K M N O P R S T U V W  + + +

A

+
+
AbstractProtocol - Class in com.flowpowered.network.protocol
+
+
A AbstractProtocol stores to what port the protocol should be bound to.
+
+
AbstractProtocol(String) - Constructor for class com.flowpowered.network.protocol.AbstractProtocol
+
 
+
AbstractProtocol(String, Logger) - Constructor for class com.flowpowered.network.protocol.AbstractProtocol
+
 
+
AnnotatedMessageHandler - Class in com.flowpowered.network.util
+
+
A class for handling messages with annotated methods referred to as handles.
+
+
AnnotatedMessageHandler(Object) - Constructor for class com.flowpowered.network.util.AnnotatedMessageHandler
+
+
Constructs a new annotated message handler using the passed object as the source of handle methods.
+
+
AnnotatedMessageHandler.Handle - Annotation Type in com.flowpowered.network.util
+
+
The annotation to mark message handle methods.
+
+
AsyncableMessage - Interface in com.flowpowered.network
+
 
+
+ + + +

B

+
+
BasicChannelInitializer - Class in com.flowpowered.network
+
+
Used to initialize the channels.
+
+
BasicChannelInitializer(ConnectionManager) - Constructor for class com.flowpowered.network.BasicChannelInitializer
+
 
+
BasicSession - Class in com.flowpowered.network.session
+
+
A basic implementation of a Session which handles and sends messages instantly.
+
+
BasicSession(Channel, AbstractProtocol) - Constructor for class com.flowpowered.network.session.BasicSession
+
+
Creates a new session.
+
+
bind(SocketAddress) - Method in class com.flowpowered.network.NetworkServer
+
 
+
bind(Class<M>, Class<C>, Integer) - Method in class com.flowpowered.network.service.CodecLookupService
+
+
Binds a codec by adding entries for it to the tables.
+
+
bind(Class<M>, Class<H>) - Method in class com.flowpowered.network.service.HandlerLookupService
+
 
+
ByteBufUtils - Class in com.flowpowered.network.util
+
+
A class containing various utility methods that act on byte buffers.
+
+
ByteBufUtils() - Constructor for class com.flowpowered.network.util.ByteBufUtils
+
 
+
+ + + +

C

+
+
capacity - Variable in class com.flowpowered.network.processor.simple.SimpleMessageProcessor
+
 
+
channelActive(ChannelHandlerContext) - Method in class com.flowpowered.network.pipeline.MessageHandler
+
 
+
ChannelClosedException - Exception in com.flowpowered.network.exception
+
 
+
ChannelClosedException() - Constructor for exception com.flowpowered.network.exception.ChannelClosedException
+
 
+
ChannelClosedException(String) - Constructor for exception com.flowpowered.network.exception.ChannelClosedException
+
 
+
channelInactive(ChannelHandlerContext) - Method in class com.flowpowered.network.pipeline.MessageHandler
+
 
+
channelRead0(ChannelHandlerContext, Message) - Method in class com.flowpowered.network.pipeline.MessageHandler
+
 
+
Codec<T extends Message> - Interface in com.flowpowered.network
+
+
Codecs are used to encode and decode a Message into a ByteBuf.
+
+
Codec.CodecRegistration - Class in com.flowpowered.network
+
 
+
CodecLookupService - Class in com.flowpowered.network.service
+
+
A class used to lookup message codecs.
+
+
CodecLookupService(int) - Constructor for class com.flowpowered.network.service.CodecLookupService
+
+
The CodecLookupService stores the codecs available in the protocol.
+
+
CodecRegistration(int, Codec<?>) - Constructor for class com.flowpowered.network.Codec.CodecRegistration
+
 
+
com.flowpowered.network - package com.flowpowered.network
+
 
+
com.flowpowered.network.exception - package com.flowpowered.network.exception
+
 
+
com.flowpowered.network.pipeline - package com.flowpowered.network.pipeline
+
 
+
com.flowpowered.network.processor - package com.flowpowered.network.processor
+
 
+
com.flowpowered.network.processor.simple - package com.flowpowered.network.processor.simple
+
 
+
com.flowpowered.network.protocol - package com.flowpowered.network.protocol
+
 
+
com.flowpowered.network.protocol.keyed - package com.flowpowered.network.protocol.keyed
+
 
+
com.flowpowered.network.protocol.simple - package com.flowpowered.network.protocol.simple
+
 
+
com.flowpowered.network.service - package com.flowpowered.network.service
+
 
+
com.flowpowered.network.session - package com.flowpowered.network.session
+
 
+
com.flowpowered.network.util - package com.flowpowered.network.util
+
 
+
connect(SocketAddress) - Method in class com.flowpowered.network.NetworkClient
+
 
+
ConnectionManager - Interface in com.flowpowered.network
+
+
This class defines a basic structure for any object which manages connections.
+
+
+ + + +

D

+
+
decode(ByteBuf) - Method in interface com.flowpowered.network.Codec
+
+
Decodes a ByteBuf into a Message.
+
+
decode(ChannelHandlerContext, ByteBuf, List<Object>) - Method in class com.flowpowered.network.pipeline.MessageDecoder
+
 
+
decode(ChannelHandlerContext, ByteBuf, List<Object>) - Method in class com.flowpowered.network.pipeline.MessageProcessorDecoder
+
 
+
disconnect() - Method in class com.flowpowered.network.session.BasicSession
+
 
+
disconnect() - Method in interface com.flowpowered.network.session.Session
+
+
Closes the session.
+
+
+ + + +

E

+
+
encode(ByteBuf, T) - Method in interface com.flowpowered.network.Codec
+
+
Encodes a Message into a ByteBuffer.
+
+
encode(ChannelHandlerContext, Message, List<Object>) - Method in class com.flowpowered.network.pipeline.MessageEncoder
+
 
+
encode(ChannelHandlerContext, ByteBuf, List<Object>) - Method in class com.flowpowered.network.pipeline.MessageProcessorEncoder
+
 
+
equals(Object) - Method in class com.flowpowered.network.Codec.CodecRegistration
+
 
+
equals(Object) - Method in interface com.flowpowered.network.Message
+
 
+
exceptionCaught(ChannelHandlerContext, Throwable) - Method in class com.flowpowered.network.pipeline.MessageHandler
+
 
+
+ + + +

F

+
+
find(int) - Method in class com.flowpowered.network.service.CodecLookupService
+
+
Retrieves the Codec from the lookup table
+
+
find(Class<M>) - Method in class com.flowpowered.network.service.CodecLookupService
+
+
Finds a codec by message class.
+
+
find(Class<M>) - Method in class com.flowpowered.network.service.HandlerLookupService
+
 
+
+ + + +

G

+
+
getAddress() - Method in class com.flowpowered.network.session.BasicSession
+
+
Returns the address of this session.
+
+
getChannel() - Method in class com.flowpowered.network.session.BasicSession
+
 
+
getCodec() - Method in class com.flowpowered.network.Codec.CodecRegistration
+
 
+
getCodecLookupService(String) - Method in class com.flowpowered.network.protocol.keyed.KeyedProtocol
+
+
Gets the codec lookup service associated with this AbstractProtocol
+
+
getCodecLookupService() - Method in class com.flowpowered.network.protocol.simple.SimpleProtocol
+
+
Gets the codec lookup service associated with this AbstractProtocol
+
+
getCodecRegistration(Class<M>) - Method in interface com.flowpowered.network.protocol.Protocol
+
+
Gets the Codec associated with encoding this Message.
+
+
getCodecRegistration(Class<M>) - Method in class com.flowpowered.network.protocol.simple.SimpleProtocol
+
 
+
getHandlerLookupService(String) - Method in class com.flowpowered.network.protocol.keyed.KeyedProtocol
+
+
Gets the handler lookup service associated with this AbstractProtocol
+
+
getHandlerLookupService() - Method in class com.flowpowered.network.protocol.simple.SimpleProtocol
+
+
Gets the handler lookup service associated with this AbstractProtocol
+
+
getLength() - Method in exception com.flowpowered.network.exception.UnknownPacketException
+
 
+
getLogger() - Method in class com.flowpowered.network.pipeline.MessageHandler
+
 
+
getLogger() - Method in class com.flowpowered.network.protocol.AbstractProtocol
+
+
Returns the logger for this protocol.
+
+
getLogger() - Method in class com.flowpowered.network.session.BasicSession
+
 
+
getLogger() - Method in interface com.flowpowered.network.session.Session
+
 
+
getMessageHandle(Class<M>) - Method in class com.flowpowered.network.protocol.AbstractProtocol
+
 
+
getMessageHandle(Class<M>) - Method in class com.flowpowered.network.protocol.simple.SimpleProtocol
+
 
+
getName() - Method in class com.flowpowered.network.protocol.AbstractProtocol
+
+
Gets the name of the AbstractProtocol
+
+
getName() - Method in interface com.flowpowered.network.protocol.Protocol
+
 
+
getOpcode() - Method in class com.flowpowered.network.Codec.CodecRegistration
+
 
+
getOpcode() - Method in exception com.flowpowered.network.exception.UnknownPacketException
+
 
+
getProcessor() - Method in class com.flowpowered.network.pipeline.MessageProcessorDecoder
+
 
+
getProcessor() - Method in class com.flowpowered.network.pipeline.MessageProcessorEncoder
+
 
+
getProcessor() - Method in class com.flowpowered.network.session.BasicSession
+
 
+
getProcessor() - Method in interface com.flowpowered.network.session.Session
+
 
+
getProtocol(String) - Method in class com.flowpowered.network.protocol.ProtocolRegistry
+
+
Gets the Protocol associated with a particular id
+
+
getProtocol(SocketAddress) - Method in class com.flowpowered.network.protocol.ProtocolRegistry
+
+
Gets the Protocol associated with a particular SocketAddress, checking by port if possible.
+
+
getProtocol() - Method in class com.flowpowered.network.session.BasicSession
+
 
+
getProtocol() - Method in interface com.flowpowered.network.session.Session
+
+
Gets the protocol associated with this session.
+
+
getProtocols() - Method in class com.flowpowered.network.protocol.ProtocolRegistry
+
+
Returns all protocols currently registered.
+
+
getSession() - Method in class com.flowpowered.network.pipeline.MessageHandler
+
 
+
getSessionId() - Method in class com.flowpowered.network.session.BasicSession
+
 
+
getState() - Method in class com.flowpowered.network.session.PulsingSession
+
+
Gets the state of this session.
+
+
getWrappedMessage(T) - Method in class com.flowpowered.network.protocol.AbstractProtocol
+
+
Allows applying a wrapper to messages with dynamically allocated id's, in case this protocol needs to provide special treatment for them.
+
+
+ + + +

H

+
+
handle(S, T) - Method in interface com.flowpowered.network.MessageHandler
+
+
Handles a message that was received.
+
+
handle(Message) - Method in class com.flowpowered.network.util.AnnotatedMessageHandler
+
+
Handles the given message.
+
+
HandlerLookupService - Class in com.flowpowered.network.service
+
 
+
HandlerLookupService() - Constructor for class com.flowpowered.network.service.HandlerLookupService
+
 
+
hashCode() - Method in class com.flowpowered.network.Codec.CodecRegistration
+
 
+
hashCode() - Method in interface com.flowpowered.network.Message
+
 
+
+ + + +

I

+
+
IllegalOpcodeException - Exception in com.flowpowered.network.exception
+
 
+
IllegalOpcodeException() - Constructor for exception com.flowpowered.network.exception.IllegalOpcodeException
+
 
+
IllegalOpcodeException(String) - Constructor for exception com.flowpowered.network.exception.IllegalOpcodeException
+
 
+
initChannel(SocketChannel) - Method in class com.flowpowered.network.BasicChannelInitializer
+
 
+
isActive() - Method in class com.flowpowered.network.session.BasicSession
+
+
True if this session is open and connected.
+
+
isAsync() - Method in interface com.flowpowered.network.AsyncableMessage
+
+
This method may optionally be used to define if the message should be handled asynchronously or synchronously, when the option is available.
+
+
+ + + +

K

+
+
KeyedProtocol - Class in com.flowpowered.network.protocol.keyed
+
+
A AbstractProtocol stores Messages and their respective Codecs and MessageHandlers by key.
+
+
KeyedProtocol(String, int) - Constructor for class com.flowpowered.network.protocol.keyed.KeyedProtocol
+
 
+
KeyedProtocol(String, int, Logger) - Constructor for class com.flowpowered.network.protocol.keyed.KeyedProtocol
+
 
+
+ + + +

M

+
+
Message - Interface in com.flowpowered.network
+
+
Implementers of this class represent the data of a message to be sent.
+
+
MessageDecoder - Class in com.flowpowered.network.pipeline
+
+
A ReplayingDecoder which decodes ByteBufs into Messages.
+
+
MessageDecoder(MessageHandler) - Constructor for class com.flowpowered.network.pipeline.MessageDecoder
+
 
+
MessageEncoder - Class in com.flowpowered.network.pipeline
+
+
A MessageToMessageEncoder which encodes into ByteBufs.
+
+
MessageEncoder(MessageHandler) - Constructor for class com.flowpowered.network.pipeline.MessageEncoder
+
 
+
MessageHandler<S extends Session,T extends Message> - Interface in com.flowpowered.network
+
+
Defines a class which handles a message of type T.
+
+
MessageHandler - Class in com.flowpowered.network.pipeline
+
+
A SimpleChannelUpstreamHandler which processes incoming network events.
+
+
MessageHandler(ConnectionManager) - Constructor for class com.flowpowered.network.pipeline.MessageHandler
+
+
Creates a new network event handler.
+
+
MessageProcessor - Interface in com.flowpowered.network.processor
+
+
MessageProcessor can be used in a PreprocessReplayingDecoder or ProcessingEncoder to define + how a ByteBuf should be processed prior to decode or after encode.
+
+
MessageProcessorDecoder - Class in com.flowpowered.network.pipeline
+
 
+
MessageProcessorDecoder(MessageHandler) - Constructor for class com.flowpowered.network.pipeline.MessageProcessorDecoder
+
 
+
MessageProcessorEncoder - Class in com.flowpowered.network.pipeline
+
+
This class provides a layer of processing after encode but before the message is passed outbound.
+
+
MessageProcessorEncoder(MessageHandler) - Constructor for class com.flowpowered.network.pipeline.MessageProcessorEncoder
+
 
+
messageReceived(Message) - Method in class com.flowpowered.network.session.BasicSession
+
+
Adds a message to the unprocessed queue.
+
+
messageReceived(Message) - Method in class com.flowpowered.network.session.PulsingSession
+
+
Adds a message to the unprocessed queue.
+
+
messageReceived(T) - Method in interface com.flowpowered.network.session.Session
+
+
Passes a message to a session for processing.
+
+
+ + + +

N

+
+
NetworkClient - Class in com.flowpowered.network
+
+
This class defines an easy, general way to start a client.
+
+
NetworkClient() - Constructor for class com.flowpowered.network.NetworkClient
+
 
+
NetworkServer - Class in com.flowpowered.network
+
+
This class defines an easy, general way to start a server.
+
+
NetworkServer() - Constructor for class com.flowpowered.network.NetworkServer
+
 
+
newSession(Channel) - Method in interface com.flowpowered.network.ConnectionManager
+
+
Creates a new Session for a Channel.
+
+
+ + + +

O

+
+
onBindFailure(SocketAddress, Throwable) - Method in class com.flowpowered.network.NetworkServer
+
+
Called when a bind fails.
+
+
onBindSuccess(SocketAddress) - Method in class com.flowpowered.network.NetworkServer
+
+
Called when a bind is successfully made.
+
+
onConnectFailure(SocketAddress, Throwable) - Method in class com.flowpowered.network.NetworkClient
+
+
Called when a connection cannot be made.
+
+
onConnectSuccess(SocketAddress) - Method in class com.flowpowered.network.NetworkClient
+
+
Called when a connection has successfully been made.
+
+
onDisconnect() - Method in class com.flowpowered.network.session.BasicSession
+
 
+
onDisconnect() - Method in interface com.flowpowered.network.session.Session
+
+
Called after the Session has been disconnected, right before the Session is invalidated.
+
+
onHandlerThrowable(Message, MessageHandler<?, ?>, Throwable) - Method in class com.flowpowered.network.session.BasicSession
+
+
Called when an exception occurs during session handling
+
+
onInboundThrowable(Throwable) - Method in class com.flowpowered.network.session.BasicSession
+
 
+
onInboundThrowable(Throwable) - Method in interface com.flowpowered.network.session.Session
+
+
Called when a throwable is thrown in the pipeline during inbound operations.
+
+
onOutboundThrowable(Throwable) - Method in class com.flowpowered.network.session.BasicSession
+
 
+
onReady() - Method in class com.flowpowered.network.session.BasicSession
+
 
+
onReady() - Method in interface com.flowpowered.network.session.Session
+
+
Called once the Session is ready for messages.
+
+
+ + + +

P

+
+
preConnectOption(ChannelOption<T>, T) - Method in class com.flowpowered.network.NetworkClient
+
+
Sets an ChannelOption to apply prior to connecting.
+
+
processInbound(ChannelHandlerContext, ByteBuf, ByteBuf) - Method in interface com.flowpowered.network.processor.MessageProcessor
+
+
Adds the data contained in the given channel buffer to the processor and returns the output channel buffer.
+
+
processInbound(ChannelHandlerContext, ByteBuf, ByteBuf) - Method in class com.flowpowered.network.processor.simple.SimpleMessageProcessor
+
 
+
processOutbound(ChannelHandlerContext, ByteBuf, ByteBuf) - Method in interface com.flowpowered.network.processor.MessageProcessor
+
+
Adds the data contained in the given channel buffer to the processor and returns the output channel buffer.
+
+
processOutbound(ChannelHandlerContext, ByteBuf, ByteBuf) - Method in class com.flowpowered.network.processor.simple.SimpleMessageProcessor
+
 
+
Protocol - Interface in com.flowpowered.network.protocol
+
 
+
ProtocolRegistry<T extends Protocol> - Class in com.flowpowered.network.protocol
+
+
This class provides a way to store Protocols by name and SocketAddress.
+
+
ProtocolRegistry() - Constructor for class com.flowpowered.network.protocol.ProtocolRegistry
+
 
+
pulse() - Method in class com.flowpowered.network.session.PulsingSession
+
 
+
PulsingSession - Class in com.flowpowered.network.session
+
+
Represents a BasicSession which has both a PulsingSession.State and PulsingSession.SendType.
+
+
PulsingSession(Channel, AbstractProtocol) - Constructor for class com.flowpowered.network.session.PulsingSession
+
+
Creates a new pulsing session.
+
+
PulsingSession.SendType - Enum in com.flowpowered.network.session
+
+
Specifies send behavior
+
+
PulsingSession.State - Enum in com.flowpowered.network.session
+
 
+
+ + + +

R

+
+
readDecode(byte[]) - Method in class com.flowpowered.network.processor.simple.SimpleMessageProcessor
+
+
Reads the data from the processor into the given array

This method does not need to be thread safe
+
+
readEncode(byte[]) - Method in class com.flowpowered.network.processor.simple.SimpleMessageProcessor
+
+
Reads the data from the processor into the given array

This method does not need to be thread safe
+
+
readHeader(ByteBuf) - Method in interface com.flowpowered.network.protocol.Protocol
+
+
Read a packet header from the buffer.
+
+
readUTF8(ByteBuf) - Static method in class com.flowpowered.network.util.ByteBufUtils
+
+
Reads an UTF8 string from a byte buffer.
+
+
readVarInt(ByteBuf) - Static method in class com.flowpowered.network.util.ByteBufUtils
+
+
Reads an integer written into the byte buffer as one of various bit sizes.
+
+
readVarLong(ByteBuf) - Static method in class com.flowpowered.network.util.ByteBufUtils
+
+
Reads an integer written into the byte buffer as one of various bit sizes.
+
+
registerMessage(String, Class<M>, Class<C>, Class<H>, Integer) - Method in class com.flowpowered.network.protocol.keyed.KeyedProtocol
+
 
+
registerMessage(Class<M>, Class<C>, Class<H>, Integer) - Method in class com.flowpowered.network.protocol.simple.SimpleProtocol
+
 
+
registerProtocol(int, T) - Method in class com.flowpowered.network.protocol.ProtocolRegistry
+
+
Registers a Protocol under its name
+
+
+ + + +

S

+
+
send(Message) - Method in class com.flowpowered.network.session.BasicSession
+
 
+
send(Message) - Method in class com.flowpowered.network.session.PulsingSession
+
 
+
send(PulsingSession.SendType, Message) - Method in class com.flowpowered.network.session.PulsingSession
+
 
+
send(Message) - Method in interface com.flowpowered.network.session.Session
+
+
Sends a message across the network.
+
+
sendAll(Message...) - Method in class com.flowpowered.network.session.BasicSession
+
 
+
sendAll(Message...) - Method in class com.flowpowered.network.session.PulsingSession
+
 
+
sendAll(PulsingSession.SendType, Message...) - Method in class com.flowpowered.network.session.PulsingSession
+
 
+
sendAll(Message...) - Method in interface com.flowpowered.network.session.Session
+
+
Sends any amount of messages to the client.
+
+
sendWithFuture(Message) - Method in class com.flowpowered.network.session.BasicSession
+
 
+
Session - Interface in com.flowpowered.network.session
+
+
Represents a connection to another engine.
+
+
sessionInactivated(Session) - Method in interface com.flowpowered.network.ConnectionManager
+
+
Called when a session becomes inactive because the underlying channel has been closed.
+
+
setOption(ChannelOption<T>, T) - Method in class com.flowpowered.network.session.BasicSession
+
 
+
setProtocol(AbstractProtocol) - Method in class com.flowpowered.network.session.BasicSession
+
 
+
setState(PulsingSession.State) - Method in class com.flowpowered.network.session.PulsingSession
+
+
Sets the state of this session.
+
+
shutdown() - Method in interface com.flowpowered.network.ConnectionManager
+
 
+
shutdown() - Method in class com.flowpowered.network.NetworkClient
+
 
+
shutdown() - Method in class com.flowpowered.network.NetworkServer
+
 
+
SimpleMessageProcessor - Class in com.flowpowered.network.processor.simple
+
+
Bridge class for passing ByteBufs through byte array read/write processing.
+
+
SimpleMessageProcessor(int) - Constructor for class com.flowpowered.network.processor.simple.SimpleMessageProcessor
+
 
+
SimpleProtocol - Class in com.flowpowered.network.protocol.simple
+
+
A AbstractProtocol stores Messages and their respective Codecs and MessageHandlers.
+
+
SimpleProtocol(String, int) - Constructor for class com.flowpowered.network.protocol.simple.SimpleProtocol
+
 
+
SimpleProtocol(String, int, Logger) - Constructor for class com.flowpowered.network.protocol.simple.SimpleProtocol
+
 
+
+ + + +

T

+
+
toString() - Method in interface com.flowpowered.network.Message
+
 
+
toString() - Method in class com.flowpowered.network.service.CodecLookupService
+
 
+
toString() - Method in class com.flowpowered.network.service.HandlerLookupService
+
 
+
toString() - Method in class com.flowpowered.network.session.BasicSession
+
 
+
+ + + +

U

+
+
UnknownPacketException - Exception in com.flowpowered.network.exception
+
+
Thrown when a Codec cannot be found for a given opcode and key.
+
+
UnknownPacketException(String, int, int) - Constructor for exception com.flowpowered.network.exception.UnknownPacketException
+
 
+
+ + + +

V

+
+
valueOf(String) - Static method in enum com.flowpowered.network.session.PulsingSession.SendType
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum com.flowpowered.network.session.PulsingSession.State
+
+
Returns the enum constant of this type with the specified name.
+
+
values() - Static method in enum com.flowpowered.network.session.PulsingSession.SendType
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum com.flowpowered.network.session.PulsingSession.State
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
+ + + +

W

+
+
writeDecode(byte[], int) - Method in class com.flowpowered.network.processor.simple.SimpleMessageProcessor
+
+
Writes data to the processor

This method does not need to be thread safe
+
+
writeEncode(byte[], int) - Method in class com.flowpowered.network.processor.simple.SimpleMessageProcessor
+
+
Writes data to the processor

This method does not need to be thread safe
+
+
writeHeader(ByteBuf, Codec.CodecRegistration, ByteBuf) - Method in interface com.flowpowered.network.protocol.Protocol
+
+
Writes a packet header to a new buffer.
+
+
writeUTF8(ByteBuf, String) - Static method in class com.flowpowered.network.util.ByteBufUtils
+
+
Writes an UTF8 string to a byte buffer.
+
+
writeVarInt(ByteBuf, int) - Static method in class com.flowpowered.network.util.ByteBufUtils
+
+
Writes an integer into the byte buffer using the least possible amount of bits.
+
+
writeVarLong(ByteBuf, long) - Static method in class com.flowpowered.network.util.ByteBufUtils
+
+
Writes an integer into the byte buffer using the least possible amount of bits.
+
+
+A B C D E F G H I K M N O P R S T U V W 
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/index.html b/index.html new file mode 100644 index 0000000..d3620a3 --- /dev/null +++ b/index.html @@ -0,0 +1,75 @@ + + + + + + +Flow Network 1.0.0 API + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/overview-frame.html b/overview-frame.html new file mode 100644 index 0000000..5d1a5a9 --- /dev/null +++ b/overview-frame.html @@ -0,0 +1,32 @@ + + + + + + +Overview List (Flow Network 1.0.0 API) + + + + + +
All Classes
+
+

Packages

+ +
+

 

+ + diff --git a/overview-summary.html b/overview-summary.html new file mode 100644 index 0000000..63b2f4c --- /dev/null +++ b/overview-summary.html @@ -0,0 +1,180 @@ + + + + + + +Overview (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Flow Network 1.0.0 API

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Packages 
PackageDescription
com.flowpowered.network 
com.flowpowered.network.exception 
com.flowpowered.network.pipeline 
com.flowpowered.network.processor 
com.flowpowered.network.processor.simple 
com.flowpowered.network.protocol 
com.flowpowered.network.protocol.keyed 
com.flowpowered.network.protocol.simple 
com.flowpowered.network.service 
com.flowpowered.network.session 
com.flowpowered.network.util 
+
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/overview-tree.html b/overview-tree.html new file mode 100644 index 0000000..908def9 --- /dev/null +++ b/overview-tree.html @@ -0,0 +1,252 @@ + + + + + + +Class Hierarchy (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Interface Hierarchy

+ +

Annotation Type Hierarchy

+ +

Enum Hierarchy

+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/package-list b/package-list new file mode 100644 index 0000000..627df02 --- /dev/null +++ b/package-list @@ -0,0 +1,11 @@ +com.flowpowered.network +com.flowpowered.network.exception +com.flowpowered.network.pipeline +com.flowpowered.network.processor +com.flowpowered.network.processor.simple +com.flowpowered.network.protocol +com.flowpowered.network.protocol.keyed +com.flowpowered.network.protocol.simple +com.flowpowered.network.service +com.flowpowered.network.session +com.flowpowered.network.util diff --git a/pom.xml b/pom.xml deleted file mode 100644 index b7f7a77..0000000 --- a/pom.xml +++ /dev/null @@ -1,252 +0,0 @@ - - 4.0.0 - - - Flow Network - com.flowpowered - flow-network - 1.0.0 - jar - 2013 - https://flowpowered.com/network - Network library for the Flow collection. - - - - org.sonatype.oss - oss-parent - 9 - - - - - UTF-8 - 0 - unknown - unknown - -Xdoclint:none - - - - - - MIT License - https://tldrlegal.com/l/mit - repo - - - - - - Flow Powered - https://flowpowered.com - - - - - - DDoS - Aleksi Sapon - qctechs@gmail.com - - - kitskub - Jack Huey - kitskub@gmail.com - - - Wolf480pl - Wolf480pl - wolf480@interia.pl - - - lukespragg - Luke Spragg - the@wulf.im - - - - - - scm:git:git://github.com/flow/network.git - scm:git:ssh://git@github.com:flow/flow-network.git - https://github.com/flow/network - - - - - travis - https://travis-ci.org/flow/network - - - - - github - https://github.com/flow/network/issues - - - - - - - io.netty - netty-all - 4.0.33.Final - compile - - - org.slf4j - slf4j-api - 1.7.18 - compile - - - - junit - junit - 4.12 - test - - - hamcrest-core - org.hamcrest - - - - - org.hamcrest - hamcrest-library - 1.3 - test - - - org.powermock - powermock-api-mockito - 1.6.4 - test - - - org.powermock - powermock-module-junit4 - 1.6.4 - test - - - - - - clean install - - - - - - false - . - . - - LICENSE.txt - - - - - - - - - com.mycila.maven-license-plugin - maven-license-plugin - 1.10.b1 - - - - - ${project.name} - ${project.inceptionYear} - ${project.organization.name} - ${project.organization.url} - - true - UTF-8 - true -
HEADER.txt
- - SLASHSTAR_STYLE - - - ${project.name} - license - - - src/main/java/** - src/test/java/** - -
- clean - - format - -
-
-
- - - org.apache.maven.plugins - maven-compiler-plugin - 3.3 - - 1.7 - 1.7 - - -Xlint:all - -Xlint:-path - - true - true - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.6 - - - - ${project.name} - ${project.version}+${ciSystem}-b${buildNumber}.git-${commit} - ${project.organization.name} - ${project.organization.url} - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.3 - - false - false - - - - - org.eluder.coveralls - coveralls-maven-plugin - 4.1.0 - - - - org.codehaus.mojo - cobertura-maven-plugin - 2.7 - - xml - 256m - - -
-
-
diff --git a/script.js b/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/serialized-form.html b/serialized-form.html new file mode 100644 index 0000000..51731b8 --- /dev/null +++ b/serialized-form.html @@ -0,0 +1,173 @@ + + + + + + +Serialized Form (Flow Network 1.0.0 API) + + + + + + + + +
+ + +
Skip navigation links
+ + + + +
+ + +
+

Serialized Form

+
+
+ +
+ +
+ + +
Skip navigation links
+ + + + +
+ + +

Copyright © 2013–2016 Flow Powered. All rights reserved.

+ + diff --git a/src/main/java/com/flowpowered/network/AsyncableMessage.java b/src/main/java/com/flowpowered/network/AsyncableMessage.java deleted file mode 100644 index e989ee4..0000000 --- a/src/main/java/com/flowpowered/network/AsyncableMessage.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network; - -public interface AsyncableMessage extends Message { - /** - * This method may optionally be used to define if the message should be handled asynchronously or synchronously, when the option is available. - * It is completely up to the implementation how this is used. - */ - public boolean isAsync(); -} \ No newline at end of file diff --git a/src/main/java/com/flowpowered/network/BasicChannelInitializer.java b/src/main/java/com/flowpowered/network/BasicChannelInitializer.java deleted file mode 100644 index 7014097..0000000 --- a/src/main/java/com/flowpowered/network/BasicChannelInitializer.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network; - -import io.netty.channel.ChannelInitializer; -import io.netty.channel.socket.SocketChannel; - -import com.flowpowered.network.pipeline.MessageDecoder; -import com.flowpowered.network.pipeline.MessageEncoder; -import com.flowpowered.network.pipeline.MessageHandler; -import com.flowpowered.network.pipeline.MessageProcessorDecoder; -import com.flowpowered.network.pipeline.MessageProcessorEncoder; - -/** - * Used to initialize the channels. - */ -public class BasicChannelInitializer extends ChannelInitializer { - private final ConnectionManager connectionManager; - - public BasicChannelInitializer(ConnectionManager connectionManager) { - this.connectionManager = connectionManager; - } - - @Override - protected final void initChannel(SocketChannel c) { - MessageHandler handler = new MessageHandler(connectionManager); - MessageProcessorDecoder processorDecoder = new MessageProcessorDecoder(handler); - MessageProcessorEncoder processorEncoder = new MessageProcessorEncoder(handler); - MessageDecoder decoder = new MessageDecoder(handler); - MessageEncoder encoder = new MessageEncoder(handler); - - c.pipeline() - .addLast("processorDecoder", processorDecoder) - .addLast("decoder", decoder) - .addLast("processorEncoder", processorEncoder) - .addLast("encoder", encoder) - .addLast("handler", handler); - } -} diff --git a/src/main/java/com/flowpowered/network/Codec.java b/src/main/java/com/flowpowered/network/Codec.java deleted file mode 100644 index 7463602..0000000 --- a/src/main/java/com/flowpowered/network/Codec.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network; - -import io.netty.buffer.ByteBuf; - -import java.io.IOException; - -/** - * {@code Codec}s are used to encode and decode a {@link Message} into a {@link ByteBuf}. - */ -public interface Codec { - /** - * Decodes a {@link ByteBuf} into a {@link Message}. - * - * @param buffer the buffer to read from - * @return the message fully encoded. - * @throws IOException If any decoding fails on the buffer - */ - T decode(ByteBuf buffer) throws IOException; - - /** - * Encodes a {@link Message} into a {@link ByteBuffer}. - * - * @param buf the buffer to encode into. Should be empty. - * @param message The message to encode - * @throws IOException If any data on the message fails to encode - */ - ByteBuf encode(ByteBuf buf, T message) throws IOException; - - public static class CodecRegistration { - private final int opcode; - private final Codec codec; - - public CodecRegistration(int opcode, Codec codec) { - this.opcode = opcode; - this.codec = codec; - } - - public int getOpcode() { - return opcode; - } - - public Codec getCodec() { - return (Codec) codec; - } - - @Override - public int hashCode() { - int hash = 5; - hash = 67 * hash + this.opcode; - return hash; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final CodecRegistration other = (CodecRegistration) obj; - if (this.opcode != other.opcode) - return false; - return true; - } - } -} diff --git a/src/main/java/com/flowpowered/network/ConnectionManager.java b/src/main/java/com/flowpowered/network/ConnectionManager.java deleted file mode 100644 index 7c8a3b8..0000000 --- a/src/main/java/com/flowpowered/network/ConnectionManager.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network; - -import io.netty.channel.Channel; - -import com.flowpowered.network.session.Session; - -/** - * This class defines a basic structure for any object which manages connections. - */ -public interface ConnectionManager { - /** - * Creates a new Session for a {@code Channel}. This session will be used for all API-facing actions. - * Therefore, this session will most likely be saved by the {@code ConnectionManager} in order to interact with the - * {@code Session}. - * - * @param c the Channel the Session will be using - * @return the new Session - */ - Session newSession(Channel c); - - /** - * Called when a session becomes inactive because the underlying channel has been closed. - * All references to the Session should be removed, as it will no longer be valid. - * - * @param session the Session which will become inactive - */ - void sessionInactivated(Session session); - - void shutdown(); -} diff --git a/src/main/java/com/flowpowered/network/Message.java b/src/main/java/com/flowpowered/network/Message.java deleted file mode 100644 index d77a183..0000000 --- a/src/main/java/com/flowpowered/network/Message.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network; - -/** - * Implementers of this class represent the data of a message to be sent. - * There are a few rules that messages should follow: - *
    - *
  • All message fields should be immutable. This ensures thread-safety and makes it so Message objects can be safely stored
  • - *
  • Message subclasses should override {@link #toString()}, {@link #equals(Object)} , and {@link #hashCode()}.
  • - *
  • All fields in a Message should be protocol-primitive (can be written directly via ByteBuf methods or via a *single* ByteBufUtils method)
  • - *
- */ -public interface Message { - @Override - public String toString(); - - @Override - public boolean equals(Object other); - - @Override - public int hashCode(); -} diff --git a/src/main/java/com/flowpowered/network/MessageHandler.java b/src/main/java/com/flowpowered/network/MessageHandler.java deleted file mode 100644 index 3f129e9..0000000 --- a/src/main/java/com/flowpowered/network/MessageHandler.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network; - -import com.flowpowered.network.session.Session; - -/** - * Defines a class which handles a message of type {@code T}. - * - * @param the session to cast to. THIS IS UNSAFE. - * @param the type of message to handle - */ -public interface MessageHandler { - /** - * Handles a message that was received. - * - * @param session the session that received the message - * @param message the message that was received - */ - public void handle(S session, T message); -} diff --git a/src/main/java/com/flowpowered/network/NetworkClient.java b/src/main/java/com/flowpowered/network/NetworkClient.java deleted file mode 100644 index 09324da..0000000 --- a/src/main/java/com/flowpowered/network/NetworkClient.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network; - -import java.net.SocketAddress; - -import io.netty.bootstrap.Bootstrap; -import io.netty.channel.ChannelFuture; -import io.netty.channel.ChannelOption; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.GenericFutureListener; - -/** - * This class defines an easy, general way to start a client. It is recommended that any clients use or extend this class. - */ -public abstract class NetworkClient implements ConnectionManager { - private final Bootstrap bootstrap = new Bootstrap(); - private final EventLoopGroup workerGroup = new NioEventLoopGroup(); - - public NetworkClient() { - bootstrap - .group(workerGroup) - .channel(NioSocketChannel.class) - .handler(new BasicChannelInitializer(this)); - } - - public ChannelFuture connect(final SocketAddress address) { - return bootstrap.connect(address).addListener(new GenericFutureListener>() { - @Override - public void operationComplete(Future f) throws Exception { - if (f.isSuccess()) { - onConnectSuccess(address); - } else { - onConnectFailure(address, f.cause()); - } - } - }); - } - - /** - * Sets an {@link ChannelOption} to apply prior to connecting. After a connection has been established, this method is useless; an Exception *may* be thrown on it's use. - * @param - * @param option - * @param value - */ - public void preConnectOption(ChannelOption option, T value) { - bootstrap.option(option, value); - } - - /** - * Called when a connection has successfully been made. - * @param address The address we succesfully connected to. - */ - public void onConnectSuccess(SocketAddress address) { - } - - /** - * Called when a connection cannot be made. - * @param address The address that we attempted to connect to. - * @param t The cause of why the connection couldn't be made. This can be null. - */ - public void onConnectFailure(SocketAddress address, Throwable t) { - } - - @Override - public void shutdown() { - workerGroup.shutdownGracefully(); - } -} diff --git a/src/main/java/com/flowpowered/network/NetworkServer.java b/src/main/java/com/flowpowered/network/NetworkServer.java deleted file mode 100644 index cfe726a..0000000 --- a/src/main/java/com/flowpowered/network/NetworkServer.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network; - -import io.netty.bootstrap.ServerBootstrap; -import io.netty.channel.ChannelFuture; -import io.netty.channel.ChannelOption; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.nio.NioServerSocketChannel; -import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.GenericFutureListener; - -import java.net.SocketAddress; - -/** - * This class defines an easy, general way to start a server. It is recommended that any server use or extend this class. - */ -public abstract class NetworkServer implements ConnectionManager { - /** - * The {@link ServerBootstrap} used to initialize Netty. - */ - private final ServerBootstrap bootstrap = new ServerBootstrap(); - private final EventLoopGroup bossGroup = new NioEventLoopGroup(); - private final EventLoopGroup workerGroup = new NioEventLoopGroup(); - - public NetworkServer() { - bootstrap - .group(bossGroup, workerGroup) - .channel(NioServerSocketChannel.class) - .childHandler(new BasicChannelInitializer(this)) - .childOption(ChannelOption.TCP_NODELAY, true) - .childOption(ChannelOption.SO_KEEPALIVE, true); - } - - public ChannelFuture bind(final SocketAddress address) { - return bootstrap.bind(address).addListener(new GenericFutureListener>() { - @Override - public void operationComplete(Future f) throws Exception { - if (f.isSuccess()) { - onBindSuccess(address); - } else { - onBindFailure(address, f.cause()); - } - } - }); - } - - /** - * Called when a bind is successfully made. - * @param address The address we are now bound too. - */ - public void onBindSuccess(SocketAddress address) { - } - - /** - * Called when a bind fails. - * @param address The address we attempted to bind too. - * @param t The cause of why the binding failed. This can be null. - */ - public void onBindFailure(SocketAddress address, Throwable t) { - } - - @Override - public void shutdown() { - workerGroup.shutdownGracefully(); - bossGroup.shutdownGracefully(); - } -} diff --git a/src/main/java/com/flowpowered/network/exception/ChannelClosedException.java b/src/main/java/com/flowpowered/network/exception/ChannelClosedException.java deleted file mode 100644 index 5396b98..0000000 --- a/src/main/java/com/flowpowered/network/exception/ChannelClosedException.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.exception; - -public class ChannelClosedException extends RuntimeException { - private static final long serialVersionUID = 1L; - - public ChannelClosedException() { - } - - public ChannelClosedException(String message) { - super(message); - } - -} diff --git a/src/main/java/com/flowpowered/network/exception/IllegalOpcodeException.java b/src/main/java/com/flowpowered/network/exception/IllegalOpcodeException.java deleted file mode 100644 index 93dab94..0000000 --- a/src/main/java/com/flowpowered/network/exception/IllegalOpcodeException.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.exception; - -public class IllegalOpcodeException extends Exception { - - public IllegalOpcodeException() { - } - - public IllegalOpcodeException(String message) { - super(message); - } - -} diff --git a/src/main/java/com/flowpowered/network/exception/UnknownPacketException.java b/src/main/java/com/flowpowered/network/exception/UnknownPacketException.java deleted file mode 100644 index 4fad879..0000000 --- a/src/main/java/com/flowpowered/network/exception/UnknownPacketException.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.exception; - -/** - * Thrown when a {@link com.flowpowered.network.Codec} cannot be found for a given opcode and key. - */ -public class UnknownPacketException extends Exception { - private static final long serialVersionUID = 2479966238464122702L; - private final int opcode; - /** - * If the length is -1, the length is unknown. - */ - private final int length; - - /** - * @param opcode the opcode of the unknown packet - */ - public UnknownPacketException(String message, int opcode, int length) { - super(message); - this.opcode = opcode; - this.length = length; - } - - public int getOpcode() { - return opcode; - } - - public int getLength() { - return length; - } -} diff --git a/src/main/java/com/flowpowered/network/pipeline/MessageDecoder.java b/src/main/java/com/flowpowered/network/pipeline/MessageDecoder.java deleted file mode 100644 index b3b79db..0000000 --- a/src/main/java/com/flowpowered/network/pipeline/MessageDecoder.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.pipeline; - -import java.util.List; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.ReplayingDecoder; - -import com.flowpowered.network.Codec; -import com.flowpowered.network.Message; -import com.flowpowered.network.exception.UnknownPacketException; -import com.flowpowered.network.protocol.Protocol; - -/** - * A {@link ReplayingDecoder} which decodes {@link ByteBuf}s into {@link Message}s. - */ -public class MessageDecoder extends ReplayingDecoder { - private final MessageHandler messageHandler; - - public MessageDecoder(final MessageHandler handler) { - this.messageHandler = handler; - } - - @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf buf, List out) throws Exception { - Protocol protocol = messageHandler.getSession().getProtocol(); - Codec codec = null; - try { - codec = protocol.readHeader(buf); - } catch (UnknownPacketException e) { - // We want to catch this and read the length if possible - int length = e.getLength(); - if (length != -1 && length != 0) { - buf.readBytes(length); - } - throw e; - } - - if (codec == null) { - throw new UnsupportedOperationException("Protocol#readHeader cannot return null!"); - } - Message decoded = codec.decode(buf); - out.add(decoded); - } -} \ No newline at end of file diff --git a/src/main/java/com/flowpowered/network/pipeline/MessageEncoder.java b/src/main/java/com/flowpowered/network/pipeline/MessageEncoder.java deleted file mode 100644 index 2c01349..0000000 --- a/src/main/java/com/flowpowered/network/pipeline/MessageEncoder.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.pipeline; - -import java.io.IOException; -import java.util.List; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToMessageEncoder; - -import com.flowpowered.network.Codec.CodecRegistration; -import com.flowpowered.network.Message; -import com.flowpowered.network.protocol.Protocol; - -/** - * A {@link MessageToMessageEncoder} which encodes into {@link ByteBuf}s. - */ -public class MessageEncoder extends MessageToMessageEncoder { - private final MessageHandler messageHandler; - - public MessageEncoder(final MessageHandler messageHandler) { - this.messageHandler = messageHandler; - } - - @Override - protected void encode(ChannelHandlerContext ctx, Message message, List out) throws Exception { - final Protocol protocol = messageHandler.getSession().getProtocol(); - final Class clazz = message.getClass(); - CodecRegistration reg = protocol.getCodecRegistration(message.getClass()); - if (reg == null) { - throw new Exception("Unknown message type: " + clazz + "."); - } - ByteBuf messageBuf = ctx.alloc().buffer(); - messageBuf = reg.getCodec().encode(messageBuf, message); - - ByteBuf headerBuf = ctx.alloc().buffer(); - headerBuf = protocol.writeHeader(headerBuf, reg, messageBuf); - out.add(Unpooled.wrappedBuffer(headerBuf, messageBuf)); - } -} \ No newline at end of file diff --git a/src/main/java/com/flowpowered/network/pipeline/MessageHandler.java b/src/main/java/com/flowpowered/network/pipeline/MessageHandler.java deleted file mode 100644 index c859d7e..0000000 --- a/src/main/java/com/flowpowered/network/pipeline/MessageHandler.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.pipeline; - -import java.util.concurrent.atomic.AtomicReference; - -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.flowpowered.network.ConnectionManager; -import com.flowpowered.network.Message; -import com.flowpowered.network.session.Session; - -/** - * A {@link SimpleChannelUpstreamHandler} which processes incoming network events. - */ -public class MessageHandler extends SimpleChannelInboundHandler { - /** - * The associated session - */ - private final AtomicReference session = new AtomicReference<>(null); - private final ConnectionManager connectionManager; - - /** - * Creates a new network event handler. - */ - public MessageHandler(ConnectionManager connectionManager) { - this.connectionManager = connectionManager; - } - - @Override - public void channelActive(ChannelHandlerContext ctx) { - final Channel c = ctx.channel(); - Session s = connectionManager.newSession(c); - if (!this.session.compareAndSet(null, s)) { - throw new IllegalStateException("Session may not be set more than once"); - } - s.onReady(); - } - - @Override - public void channelInactive(ChannelHandlerContext ctx) { - Session session = this.session.get(); - session.onDisconnect(); - connectionManager.sessionInactivated(session); - } - - @Override - protected void channelRead0(ChannelHandlerContext ctx, Message i) { - session.get().messageReceived(i); - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - session.get().onInboundThrowable(cause); - } - - public Session getSession() { - return session.get(); - } - - protected Logger getLogger() { - String loggerName = ""; - if (session.get() != null) { - Logger protocolLogger = session.get().getLogger(); - // TODO: Maybe we should just use the protocolLogger if present? - loggerName = protocolLogger != null ? protocolLogger.getName() + "." : ""; - } - return LoggerFactory.getLogger(loggerName + getClass().getSimpleName()); - } -} diff --git a/src/main/java/com/flowpowered/network/pipeline/MessageProcessorDecoder.java b/src/main/java/com/flowpowered/network/pipeline/MessageProcessorDecoder.java deleted file mode 100644 index acc4930..0000000 --- a/src/main/java/com/flowpowered/network/pipeline/MessageProcessorDecoder.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.pipeline; - -import java.util.List; - -import com.flowpowered.network.processor.MessageProcessor; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.ByteToMessageDecoder; - -public class MessageProcessorDecoder extends ByteToMessageDecoder { - private final MessageHandler messageHandler; - - public MessageProcessorDecoder(final MessageHandler messageHandler) { - this.messageHandler = messageHandler; - } - - @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf buf, List frames) throws Exception { - MessageProcessor processor = getProcessor(); - if (processor == null) { - frames.add(buf.readBytes(buf.readableBytes())); - return; - } - // Eventually, we will run out of bytes and a ReplayableError will be called - ByteBuf liveBuffer = ctx.alloc().buffer(); - liveBuffer = processor.processInbound(ctx, buf, liveBuffer); - frames.add(liveBuffer); - } - - protected MessageProcessor getProcessor() { - return messageHandler.getSession().getProcessor(); - } -} diff --git a/src/main/java/com/flowpowered/network/pipeline/MessageProcessorEncoder.java b/src/main/java/com/flowpowered/network/pipeline/MessageProcessorEncoder.java deleted file mode 100644 index 1041996..0000000 --- a/src/main/java/com/flowpowered/network/pipeline/MessageProcessorEncoder.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.pipeline; - -import java.util.List; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToMessageEncoder; - -import com.flowpowered.network.processor.MessageProcessor; - -/** - * This class provides a layer of processing after encode but before the message is passed outbound. - */ -public class MessageProcessorEncoder extends MessageToMessageEncoder { - private final MessageHandler messageHandler; - - public MessageProcessorEncoder(final MessageHandler messageHandler) { - this.messageHandler = messageHandler; - } - - @Override - protected void encode(ChannelHandlerContext ctx, final ByteBuf buf, List out) throws Exception { - final MessageProcessor processor = getProcessor(); - if (processor == null) { - out.add(buf.readBytes(buf.readableBytes())); - return; - } - ByteBuf toAdd = ctx.alloc().buffer(); - toAdd = processor.processOutbound(ctx, buf, toAdd); - out.add(toAdd); - } - - protected MessageProcessor getProcessor() { - return messageHandler.getSession().getProcessor(); - } -} diff --git a/src/main/java/com/flowpowered/network/processor/MessageProcessor.java b/src/main/java/com/flowpowered/network/processor/MessageProcessor.java deleted file mode 100644 index dbc128f..0000000 --- a/src/main/java/com/flowpowered/network/processor/MessageProcessor.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.processor; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; - -/** - * {@code MessageProcessor} can be used in a {@link PreprocessReplayingDecoder} or {@link ProcessingEncoder} to define - * how a {@code ByteBuf} should be processed prior to decode or after encode. - */ -public interface MessageProcessor { - /** - * Adds the data contained in the given channel buffer to the processor and returns the output channel buffer. The method may be called from multiple threads.
- * This is called after {@code Codec.encode}, but before the message is sent.
- * {@code input.release} should NOT be called; it is done externally.
- * {@code buffer.release} should NOT be called; it is done externally.
- * - * @param ctx the channel handler context - * @param input the buffer containing the input data - * @param buffer the buffer to add the data to; will be dynamically-sized - * @return the processed outbound ByteBuf - */ - public ByteBuf processOutbound(ChannelHandlerContext ctx, ByteBuf input, ByteBuf buffer); - - /** - * Adds the data contained in the given channel buffer to the processor and returns the output channel buffer. The method may be called from multiple threads.
- * This should read as much data from {@code input} as possible. It does not replay.
- * This is called after the message arrives, but before {@code Codec.decode} is called.
- * {@code input.release} should NOT be called; it is done externally.
- * {@code buffer.release} should NOT be called; it is done externally.
- * - * @param ctx the channel handler context - * @param input the buffer containing the input data - * @param buffer the buffer to add the data to; will be dynamically-sized - * @return the processed inbound buffer - */ - public ByteBuf processInbound(ChannelHandlerContext ctx, ByteBuf input, ByteBuf buffer); -} diff --git a/src/main/java/com/flowpowered/network/processor/simple/SimpleMessageProcessor.java b/src/main/java/com/flowpowered/network/processor/simple/SimpleMessageProcessor.java deleted file mode 100644 index 64950fd..0000000 --- a/src/main/java/com/flowpowered/network/processor/simple/SimpleMessageProcessor.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.processor.simple; - -import com.flowpowered.network.processor.MessageProcessor; -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; - -/** - * Bridge class for passing ByteBufs through byte array read/write processing. This is only only one {@link DividedMessageProcessorPart} and must use a {@link DividedMessageProcessor} - */ -public abstract class SimpleMessageProcessor implements MessageProcessor { - protected final int capacity; - private final byte[] decodingByteBuffer; - private final byte[] encodingByteBuffer; - - public SimpleMessageProcessor(int capacity) { - this.capacity = capacity; - this.decodingByteBuffer = new byte[capacity]; - this.encodingByteBuffer = new byte[capacity]; - } - - @Override - public final synchronized ByteBuf processOutbound(ChannelHandlerContext ctx, final ByteBuf input, ByteBuf buffer) { - int remaining; - while ((remaining = input.readableBytes()) > 0) { - int clamped = Math.min(remaining, capacity); - input.readBytes(encodingByteBuffer, 0, clamped); - writeEncode(encodingByteBuffer, clamped); - int read; - while ((read = readEncode(encodingByteBuffer)) > 0) { - buffer.writeBytes(encodingByteBuffer, 0, read); - } - } - return buffer; - } - - /** - * Writes data to the processor

This method does not need to be thread safe - * - * @param buf a buffer containing the data - * @param length the length of the data to process - */ - protected abstract void writeEncode(byte[] buf, int length); - - /** - * Reads the data from the processor into the given array

This method does not need to be thread safe - * - * @param buf the byte array to process the data to - * @return the number of bytes written - */ - protected abstract int readEncode(byte[] buf); - - @Override - public final synchronized ByteBuf processInbound(ChannelHandlerContext ctx, final ByteBuf input, ByteBuf buffer) { - int remaining; - while ((remaining = input.readableBytes()) > 0) { - int clamped = Math.min(remaining, capacity); - input.readBytes(decodingByteBuffer, 0, clamped); - writeDecode(decodingByteBuffer, clamped); - int read; - while ((read = readDecode(decodingByteBuffer)) > 0) { - buffer.writeBytes(decodingByteBuffer, 0, read); - } - } - return buffer; - } - - /** - * Writes data to the processor

This method does not need to be thread safe - * - * @param buf a buffer containing the data - * @param length the length of the data to process - */ - protected abstract void writeDecode(byte[] buf, int length); - - /** - * Reads the data from the processor into the given array

This method does not need to be thread safe - * - * @param buf the byte array to process the data to - * @return the number of bytes written - */ - protected abstract int readDecode(byte[] buf); -} diff --git a/src/main/java/com/flowpowered/network/protocol/AbstractProtocol.java b/src/main/java/com/flowpowered/network/protocol/AbstractProtocol.java deleted file mode 100644 index 412c7b7..0000000 --- a/src/main/java/com/flowpowered/network/protocol/AbstractProtocol.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.protocol; - -import java.io.IOException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.flowpowered.network.Message; -import com.flowpowered.network.MessageHandler; - -/** - * A {@code AbstractProtocol} stores to what port the protocol should be bound to. - */ -public abstract class AbstractProtocol implements Protocol { - private final String name; - private final Logger logger; - - public AbstractProtocol(String name) { - this(name, LoggerFactory.getLogger("Protocol." + name)); - } - - /** - * @param name - * @param maxPackets - * @param logger - */ - public AbstractProtocol(String name, Logger logger) { - this.name = name; - this.logger = logger; - } - - /** - * Gets the name of the AbstractProtocol - * - * @return the name - */ - @Override - public String getName() { - return name; - } - - /** - * Returns the logger for this protocol. - * - * @return the logger - */ - public Logger getLogger() { - return logger; - } - - /** - * Allows applying a wrapper to messages with dynamically allocated id's, in case this protocol needs to provide special treatment for them. - * - * @param dynamicMessage The message with a dynamically-allocated codec - * @return The new message - */ - public Message getWrappedMessage(T dynamicMessage) throws IOException { - return dynamicMessage; - } - - public abstract MessageHandler getMessageHandle(Class message); -} \ No newline at end of file diff --git a/src/main/java/com/flowpowered/network/protocol/Protocol.java b/src/main/java/com/flowpowered/network/protocol/Protocol.java deleted file mode 100644 index 28c2925..0000000 --- a/src/main/java/com/flowpowered/network/protocol/Protocol.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.protocol; - -import com.flowpowered.network.Codec; -import com.flowpowered.network.Codec.CodecRegistration; -import com.flowpowered.network.Message; -import com.flowpowered.network.exception.UnknownPacketException; - -import io.netty.buffer.ByteBuf; - -public interface Protocol { - - /** - * @return the name of this Protocol - */ - String getName(); - - /** - * Read a packet header from the buffer. If a codec is not known, throw a {@link UnknownPacketException} - * - * @param buf The buffer to read from - * @return The correct codec; null will throw an UnsupportedOperationException - * @throws UnknownPacketException when the opcode does not have an associated codec - */ - Codec readHeader(ByteBuf buf) throws UnknownPacketException; - - /** - * Gets the {@link Codec} associated with encoding this {@link Message}. - * - * @param the message type - * @param message the message - * @return the codec to encode with - */ - CodecRegistration getCodecRegistration(Class message); - - /** - * Writes a packet header to a new buffer. - * - * @param header the buffer which to write the header to - * @param codec The codec the message was written with - * @param data The data from the encoded message - * @return the header ByteBuf to use - */ - ByteBuf writeHeader(ByteBuf header, CodecRegistration codec, ByteBuf data); -} \ No newline at end of file diff --git a/src/main/java/com/flowpowered/network/protocol/ProtocolRegistry.java b/src/main/java/com/flowpowered/network/protocol/ProtocolRegistry.java deleted file mode 100644 index 763ba7f..0000000 --- a/src/main/java/com/flowpowered/network/protocol/ProtocolRegistry.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.protocol; - -import java.net.InetSocketAddress; -import java.net.SocketAddress; -import java.util.Collection; -import java.util.Collections; -import java.util.concurrent.ConcurrentHashMap; - -/** - * This class provides a way to store Protocols by name and {@link SocketAddress}. - * - */ -public class ProtocolRegistry { - private final ConcurrentHashMap names = new ConcurrentHashMap<>(); - private final ConcurrentHashMap sockets = new ConcurrentHashMap<>(); - - /** - * Registers a Protocol under its name - * - * @param protocol the Protocol - */ - public void registerProtocol(int port, T protocol) { - this.names.put(protocol.getName(), protocol); - this.sockets.put(port, protocol); - } - - /** - * Gets the Protocol associated with a particular id - * - * @param name the id - * @return the Protocol - */ - public T getProtocol(String name) { - return this.names.get(name); - } - - /** - * Gets the Protocol associated with a particular {@code SocketAddress}, checking by port if possible. - * - * @param address the address - * @return the Protocol - */ - public T getProtocol(SocketAddress address) { - if (address instanceof InetSocketAddress) { - return this.sockets.get(((InetSocketAddress) address).getPort()); - } - return null; - } - - /** - * Returns all protocols currently registered. The returned collection is unmodifiable. - * - * @return All registered protocols - */ - public Collection getProtocols() { - return Collections.unmodifiableCollection(this.names.values()); - } - -} diff --git a/src/main/java/com/flowpowered/network/protocol/keyed/KeyedProtocol.java b/src/main/java/com/flowpowered/network/protocol/keyed/KeyedProtocol.java deleted file mode 100644 index 2303022..0000000 --- a/src/main/java/com/flowpowered/network/protocol/keyed/KeyedProtocol.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.protocol.keyed; - -import java.lang.reflect.InvocationTargetException; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import com.flowpowered.network.Codec; -import com.flowpowered.network.Codec.CodecRegistration; -import com.flowpowered.network.Message; -import com.flowpowered.network.MessageHandler; -import com.flowpowered.network.protocol.AbstractProtocol; -import com.flowpowered.network.service.CodecLookupService; -import com.flowpowered.network.service.HandlerLookupService; - -import org.slf4j.Logger; - -/** - * A {@code AbstractProtocol} stores {@link Message}s and their respective {@link Codec}s and {@link MessageHandler}s by key. - */ -public abstract class KeyedProtocol extends AbstractProtocol { - private final int maxPackets; - private final ConcurrentMap codecLookup; - private final ConcurrentMap handlerLookup; - - /** - * @param name - * @param maxPackets {@see CodecLookupService} - */ - public KeyedProtocol(String name, int maxPackets) { - super(name); - this.maxPackets = maxPackets; - codecLookup = new ConcurrentHashMap<>(); - handlerLookup = new ConcurrentHashMap<>(); - } - - /** - * @param name - * @param maxPackets {@see CodecLookupService} - * @param logger - */ - public KeyedProtocol(String name, int maxPackets, Logger logger) { - super(name, logger); - this.maxPackets = maxPackets; - codecLookup = new ConcurrentHashMap<>(); - handlerLookup = new ConcurrentHashMap<>(); - } - - /** - * Gets the handler lookup service associated with this AbstractProtocol - * - * @return the handler lookup service, or null if none - */ - protected HandlerLookupService getHandlerLookupService(String key) { - return handlerLookup.get(key); - } - - /** - * Gets the codec lookup service associated with this AbstractProtocol - * - * @return the codec lookup service, or null if none - */ - protected CodecLookupService getCodecLookupService(String key) { - return codecLookup.get(key); - } - - public , H extends MessageHandler> CodecRegistration registerMessage(String key, Class message, Class codec, Class handler, Integer opcode) { - try { - CodecLookupService codecLookup = this.codecLookup.get(key); - if (codecLookup == null) { - codecLookup = new CodecLookupService(maxPackets); - this.codecLookup.put(key, codecLookup); - } - HandlerLookupService handlerLookup = this.handlerLookup.get(key); - if (handlerLookup == null) { - handlerLookup = new HandlerLookupService(); - this.handlerLookup.put(key, handlerLookup); - } - CodecRegistration bind = codecLookup.bind(message, codec, opcode); - if (bind != null && handler != null) { - handlerLookup.bind(message, handler); - } - return bind; - } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { - getLogger().error("Error registering codec " + codec + ": ", e); // TODO: Use parametrized message instead of string concatation. - return null; - } - } - -} \ No newline at end of file diff --git a/src/main/java/com/flowpowered/network/protocol/simple/SimpleProtocol.java b/src/main/java/com/flowpowered/network/protocol/simple/SimpleProtocol.java deleted file mode 100644 index 9583a5c..0000000 --- a/src/main/java/com/flowpowered/network/protocol/simple/SimpleProtocol.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.protocol.simple; - -import java.lang.reflect.InvocationTargetException; - -import com.flowpowered.network.Codec; -import com.flowpowered.network.Codec.CodecRegistration; -import com.flowpowered.network.Message; -import com.flowpowered.network.MessageHandler; -import com.flowpowered.network.protocol.AbstractProtocol; -import com.flowpowered.network.service.CodecLookupService; -import com.flowpowered.network.service.HandlerLookupService; - -import org.slf4j.Logger; - -/** - * A {@code AbstractProtocol} stores {@link Message}s and their respective {@link Codec}s and {@link MessageHandler}s. - */ -public abstract class SimpleProtocol extends AbstractProtocol { - private final CodecLookupService codecLookup; - private final HandlerLookupService handlerLookup; - - /** - * @param name - * @param maxPackets {@see CodecLookupService} - */ - public SimpleProtocol(String name, int maxPackets) { - super(name); - codecLookup = new CodecLookupService(maxPackets); - handlerLookup = new HandlerLookupService(); - } - - /** - * @param name - * @param maxPackets {@see CodecLookupService} - * @param logger - */ - public SimpleProtocol(String name, int maxPackets, Logger logger) { - super(name, logger); - codecLookup = new CodecLookupService(maxPackets); - handlerLookup = new HandlerLookupService(); - } - - /** - * Gets the handler lookup service associated with this AbstractProtocol - * - * @return the handler lookup service - */ - protected HandlerLookupService getHandlerLookupService() { - return handlerLookup; - } - - /** - * Gets the codec lookup service associated with this AbstractProtocol - * - * @return the codec lookup service - */ - protected CodecLookupService getCodecLookupService() { - return codecLookup; - } - - @Override - public CodecRegistration getCodecRegistration(Class message) { - return codecLookup.find(message); - } - - @Override - public MessageHandler getMessageHandle(Class message) { - return handlerLookup.find(message); - } - - public , H extends MessageHandler> CodecRegistration registerMessage(Class message, Class codec, Class handler, Integer opcode) { - try { - CodecRegistration bind = codecLookup.bind(message, codec, opcode); - if (bind != null && handler != null) { - handlerLookup.bind(message, handler); - } - return bind; - } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { - getLogger().error("Error registering codec " + codec + ": ", e); // TODO: Use parametrized message instead of string concatation. - return null; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/flowpowered/network/service/CodecLookupService.java b/src/main/java/com/flowpowered/network/service/CodecLookupService.java deleted file mode 100644 index 949ec21..0000000 --- a/src/main/java/com/flowpowered/network/service/CodecLookupService.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.service; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.atomic.AtomicInteger; - -import com.flowpowered.network.Codec; -import com.flowpowered.network.Codec.CodecRegistration; -import com.flowpowered.network.Message; -import com.flowpowered.network.exception.IllegalOpcodeException; - -/** - * A class used to lookup message codecs. - */ -public class CodecLookupService { - /** - * A lookup table for the Message classes mapped to their Codec. - */ - private final ConcurrentMap, CodecRegistration> messages; - /** - * Lookup table for opcodes mapped to their codecs. - */ - private final ConcurrentMap opcodes; - private final Codec[] opcodeTable; - /** - * Stores the next opcode available. - */ - private final AtomicInteger nextId; - - /** - * The {@link CodecLookupService} stores the codecs available in the protocol. Codecs can be found using either the class of the message they represent or their message's opcode. - * If the provided size is 0 then a map for the opcode->Codec mapping; otherwise, an array will be used. - * - * @param size 0 for map, otherwise the array size - */ - public CodecLookupService(int size) { - if (size < 0) { - throw new IllegalArgumentException("Size cannot be less than 0!"); - } - messages = new ConcurrentHashMap<>(); - if (size == 0) { - opcodes = new ConcurrentHashMap<>(); - opcodeTable = null; - } else { - opcodeTable = new Codec[size]; - opcodes = null; - } - nextId = new AtomicInteger(0); - } - - /** - * Binds a codec by adding entries for it to the tables. TODO: if a dynamic opcode is registered then a static opcode tries to register, reassign dynamic. TODO: if a static opcode is registered then - * a static opcode tries to register, throw exception - * - * @param messageClazz The message's class - * @param codecClazz The codec's class. - * @param opcode the opcode to register with, or null if the codec should be dynamic - * @param The type of message - * @param The type of codec. - * @return the registration object of the codec - * @throws InstantiationException if the codec could not be instantiated. - * @throws IllegalAccessException if the codec could not be instantiated due to an access violation. - */ - @SuppressWarnings("unchecked") - public > CodecRegistration bind(Class messageClazz, Class codecClazz, Integer opcode) throws InstantiationException, IllegalAccessException, InvocationTargetException { - CodecRegistration reg = messages.get(messageClazz); - if (reg != null) { - return reg; - } - C codec; - try { - Constructor con = codecClazz.getConstructor(); - con.setAccessible(true); - codec = con.newInstance(); - } catch(NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - throw new IllegalArgumentException("Codec could not be created!", e); - } - if (opcode != null) { - if (opcode < 0) { - throw new IllegalArgumentException("Opcode must either be null or greater than or equal to 0!"); - } - } else { - int id; - try { - do { - id = nextId.getAndIncrement(); - } while (get(id) != null); - } catch (IndexOutOfBoundsException ioobe) { - throw new IllegalStateException("Ran out of Ids!", ioobe); - } - opcode = id; - } - Codec previous = get(opcode); - if (previous != null && previous.getClass() != codecClazz) { - throw new IllegalStateException("Trying to bind an opcode where one already exists. New: " + codecClazz.getSimpleName() + " Old: " + previous.getClass().getSimpleName()); - } - put(opcode, codec); - reg = new CodecRegistration(opcode, codec); - messages.put(messageClazz, reg); - return reg; - } - - private Codec get(int opcode) throws ArrayIndexOutOfBoundsException { - if (opcodeTable != null && opcodes == null) { - return opcodeTable[opcode]; - } else if (opcodes != null && opcodeTable == null) { - return opcodes.get(opcode); - } else { - throw new IllegalStateException("One and only one codec storage system must be in use!"); - } - } - - private void put(int opcode, Codec codec) { - if (opcodeTable != null && opcodes == null) { - opcodeTable[opcode] = codec; - } else if (opcodes != null && opcodeTable == null) { - opcodes.put(opcode, codec); - } else { - throw new IllegalStateException("One and only one codec storage system must be in use!"); - } - } - - /** - * Retrieves the {@link Codec} from the lookup table - * - * @param opcode The opcode which the codec uses - * @return The codec - * @throws IllegalOpcodeException if the opcode is not bound - */ - public Codec find(int opcode) throws IllegalOpcodeException { - try { - Codec c = get(opcode); - if (c == null) { - throw new NullPointerException(); - } - return c; - } catch (ArrayIndexOutOfBoundsException | NullPointerException e) { - throw new IllegalOpcodeException("Opcode " + opcode + " is not bound!"); - } - } - - /** - * Finds a codec by message class. - * - * @param clazz The message class. - * @param The type of message. - * @return The codec, or {@code null} if it could not be found. - */ - @SuppressWarnings("unchecked") - public CodecRegistration find(Class clazz) { - return messages.get(clazz); - } - - @Override - public String toString() { - return "CodecLookupService{" + "messages=" + messages + ", opcodes=" + opcodes + '}'; - } -} diff --git a/src/main/java/com/flowpowered/network/service/HandlerLookupService.java b/src/main/java/com/flowpowered/network/service/HandlerLookupService.java deleted file mode 100644 index 2e91ec9..0000000 --- a/src/main/java/com/flowpowered/network/service/HandlerLookupService.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.service; - -import com.flowpowered.network.MessageHandler; -import com.flowpowered.network.Message; -import java.util.HashMap; -import java.util.Map; - -public class HandlerLookupService { - private final Map, MessageHandler> handlers = new HashMap<>(); - - public > void bind(Class clazz, Class handlerClass) throws InstantiationException, IllegalAccessException { - MessageHandler handler = handlerClass.newInstance(); - handlers.put(clazz, handler); - } - - @SuppressWarnings("unchecked") - public MessageHandler find(Class clazz) { - return (MessageHandler) handlers.get(clazz); - } - - @Override - public String toString() { - return "HandlerLookupService{" + "handlers=" + handlers + '}'; - } -} diff --git a/src/main/java/com/flowpowered/network/session/BasicSession.java b/src/main/java/com/flowpowered/network/session/BasicSession.java deleted file mode 100644 index 79e5ccb..0000000 --- a/src/main/java/com/flowpowered/network/session/BasicSession.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.session; - -import java.net.InetSocketAddress; -import java.net.SocketAddress; -import java.util.Random; - -import com.flowpowered.network.Message; -import com.flowpowered.network.MessageHandler; -import com.flowpowered.network.exception.ChannelClosedException; -import com.flowpowered.network.processor.MessageProcessor; -import com.flowpowered.network.protocol.AbstractProtocol; -import io.netty.channel.Channel; -import io.netty.channel.ChannelFuture; -import io.netty.channel.ChannelOption; -import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.GenericFutureListener; -import org.slf4j.Logger; - -/** - * A basic implementation of a {@link Session} which handles and sends messages instantly. - */ -public class BasicSession implements Session { - /** - * The Random used for sessionIds. - */ - private static final Random random = new Random(); - /** - * The channel associated with this session. - */ - private final Channel channel; - /** - * The random long used for client-server handshake - */ - private final String sessionId = Long.toString(random.nextLong(), 16).trim(); - /** - * The protocol for this session - */ - private AbstractProtocol protocol; - - /** - * Creates a new session. - * - * @param channel The channel associated with this session. - * @param bootstrapProtocol the protocol - */ - public BasicSession(Channel channel, AbstractProtocol bootstrapProtocol) { - this.channel = channel; - this.protocol = bootstrapProtocol; - } - - @SuppressWarnings("unchecked") - private void handleMessage(Message message) { - Class messageClass = (Class) message.getClass(); - MessageHandler handler = (MessageHandler) protocol.getMessageHandle(messageClass); - if (handler != null) { - try { - handler.handle(this, message); - } catch (Throwable t) { - onHandlerThrowable(message, handler, t); - } - } - } - - public ChannelFuture sendWithFuture(Message message) throws ChannelClosedException { - if (!channel.isActive()) { - throw new ChannelClosedException("Trying to send a message when a session is inactive!"); - } - return channel.writeAndFlush(message).addListener(new GenericFutureListener>() { - @Override - public void operationComplete(Future future) throws Exception { - if (future.cause() != null) { - onOutboundThrowable(future.cause()); - } - } - }); - } - - @Override - public void send(Message message) throws ChannelClosedException { - sendWithFuture(message); - } - - @Override - public void sendAll(Message... messages) throws ChannelClosedException { - for (Message msg : messages) { - send(msg); - } - } - - /** - * Returns the address of this session. - * - * @return The remote address. - */ - public InetSocketAddress getAddress() { - SocketAddress addr = channel.remoteAddress(); - if (!(addr instanceof InetSocketAddress)) { - return null; - } - - return (InetSocketAddress) addr; - } - - @Override - public String toString() { - return getClass().getName() + " [address=" + channel.remoteAddress() + "]"; - } - - /** - * Adds a message to the unprocessed queue. - * - * @param message The message. - */ - @Override - public void messageReceived(Message message) { - handleMessage(message); - } - - public String getSessionId() { - return sessionId; - } - - @Override - public AbstractProtocol getProtocol() { - return this.protocol; - } - - protected void setProtocol(AbstractProtocol protocol) { - this.protocol = protocol; - } - - @Override - public MessageProcessor getProcessor() { - return null; - } - - /** - * True if this session is open and connected. If the session is closed, errors will be thrown if messages are attempted to be sent. - * - * @return is active - */ - public boolean isActive() { - return channel.isActive(); - } - - public Channel getChannel() { - return channel; - } - - @Override - public void disconnect() { - channel.close(); - } - - @Override - public void onDisconnect() { - } - - @Override - public void onReady() { - } - - @Override - public void onInboundThrowable(Throwable throwable) { - } - - public void onOutboundThrowable(Throwable throwable) { - } - - /** - * Called when an exception occurs during session handling - * - * @param message the message handler threw an exception on - * @param handle handler that threw the an exception handling the message - * @param throwable the throwable - */ - public void onHandlerThrowable(Message message, MessageHandler handle, Throwable throwable) { - } - - public void setOption(ChannelOption option, T value) { - channel.config().setOption(option, value); - } - - @Override - public Logger getLogger() { - return protocol.getLogger(); - } -} diff --git a/src/main/java/com/flowpowered/network/session/PulsingSession.java b/src/main/java/com/flowpowered/network/session/PulsingSession.java deleted file mode 100644 index 9fde3fe..0000000 --- a/src/main/java/com/flowpowered/network/session/PulsingSession.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.session; - -import java.util.ArrayDeque; -import java.util.Queue; -import java.util.concurrent.ConcurrentLinkedQueue; - -import com.flowpowered.network.AsyncableMessage; -import io.netty.channel.Channel; - -import com.flowpowered.network.Message; -import com.flowpowered.network.exception.ChannelClosedException; -import com.flowpowered.network.protocol.AbstractProtocol; - -/** - * Represents a {@link BasicSession} which has both a {@link State} and {@link SendType}. It can queue messages if needed. - */ -public class PulsingSession extends BasicSession { - /** - * A queue of incoming and unprocessed messages - */ - private final Queue messageQueue = new ArrayDeque<>(); - /** - * A queue of outgoing messages that will be sent after the client finishes identification - */ - private final Queue sendQueue = new ConcurrentLinkedQueue<>(); - /** - * The current state. - */ - private State state = State.EXCHANGE_HANDSHAKE; - - /** - * Creates a new pulsing session. - * - * @param channel The channel associated with this session. - */ - public PulsingSession(Channel channel, AbstractProtocol bootstrapProtocol) { - super(channel, bootstrapProtocol); - } - - /** - * Gets the state of this session. - * - * @return The session's state. - */ - public State getState() { - return state; - } - - /** - * Sets the state of this session. - * - * @param state The new state. - */ - public void setState(State state) { - this.state = state; - } - - public void pulse() { - Message message; - - if (state == State.OPEN) { - while ((message = sendQueue.poll()) != null) { - super.send(message); - } - } - - while ((message = messageQueue.poll()) != null) { - super.messageReceived(message); - } - } - - @Override - public void send(Message message) throws ChannelClosedException { - send(SendType.QUEUE, message); - } - - public void send(SendType type, Message message) throws ChannelClosedException { - if (message == null) { - return; - } - if (type == SendType.FORCE || this.state == State.OPEN) { - super.send(message); - } else if (type == SendType.QUEUE) { - sendQueue.add(message); - } - } - - @Override - public void sendAll(Message... messages) { - sendAll(SendType.QUEUE, messages); - } - - public void sendAll(SendType type, Message... messages) { - for (Message msg : messages) { - send(type, msg); - } - } - - /** - * Adds a message to the unprocessed queue. - * - * @param message The message. - */ - @Override - public void messageReceived(Message message) { - if (message instanceof AsyncableMessage) { - if (((AsyncableMessage) message).isAsync()) { - super.messageReceived(message); - return; - } - } - messageQueue.add(message); - } - - /** - * Specifies send behavior - */ - public static enum SendType { - /** - * Messages sent with a SendType of OPEN_ONLY will only send if State is OPEN. Messages will not be - * queued. - */ - OPEN_ONLY, /** - * Messages sent with a SendType of QUEUE will wait until State is OPEN to send. Messages may be queued. - */ - QUEUE, /** - * Messages sent with a SendType of FORCE will send as soon as possible regardless of State. - */ - FORCE - } - - public static enum State { - /** - * In the exchange handshake state, the server is waiting for the client to send its initial handshake - * packet. - */ - EXCHANGE_HANDSHAKE, /** - * In the exchange identification state, the server is waiting for the client to send its identification - * packet. - */ - EXCHANGE_IDENTIFICATION, /** - * In the exchange encryption state, the server is waiting for the client to send its encryption - * response packet. - */ - EXCHANGE_ENCRYPTION, /** - * This state is when a critical message has been sent that must be waited for. - */ - WAITING, /** - * Allows messages to be sent. - */ - OPEN - } -} diff --git a/src/main/java/com/flowpowered/network/session/Session.java b/src/main/java/com/flowpowered/network/session/Session.java deleted file mode 100644 index ec826a6..0000000 --- a/src/main/java/com/flowpowered/network/session/Session.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.session; - - -import com.flowpowered.network.Message; -import com.flowpowered.network.exception.ChannelClosedException; -import com.flowpowered.network.processor.MessageProcessor; -import com.flowpowered.network.protocol.Protocol; - -import org.slf4j.Logger; - -/** - * Represents a connection to another engine. - *
- * Controls the state, protocol and channels of a connection to another engine. - */ -public interface Session { - /** - * Passes a message to a session for processing. - * - * @param message message to be processed - */ - void messageReceived(T message); - - /** - * Gets the protocol associated with this session. - * - * @return the protocol - */ - Protocol getProtocol(); - - MessageProcessor getProcessor(); - - /** - * Sends a message across the network. - * - * @param message The message. - */ - void send(Message message) throws ChannelClosedException; - - /** - * Sends any amount of messages to the client. - * - * @param messages the messages to send to the client - */ - void sendAll(Message... messages) throws ChannelClosedException; - - /** - * Closes the session. - * - */ - void disconnect(); - - /** - * Called after the Session has been disconnected, right before the Session is invalidated. - * - */ - void onDisconnect(); - - /** - * Called once the Session is ready for messages. - * - */ - void onReady(); - - /** - * Called when a throwable is thrown in the pipeline during inbound operations. - * - * @param throwable - */ - void onInboundThrowable(Throwable throwable); - - Logger getLogger(); -} diff --git a/src/main/java/com/flowpowered/network/util/AnnotatedMessageHandler.java b/src/main/java/com/flowpowered/network/util/AnnotatedMessageHandler.java deleted file mode 100644 index ffc04f3..0000000 --- a/src/main/java/com/flowpowered/network/util/AnnotatedMessageHandler.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.util; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.lang.reflect.Method; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import com.flowpowered.network.Message; - -/** - * A class for handling messages with annotated methods referred to as handles. The methods need to be annotated with {@link com.flowpowered.network.util.AnnotatedMessageHandler.Handle} and should only - * have one parameter, the message, which needs to be a subclass of {@link com.flowpowered.network.Message}. These should be instance methods inside any class. When creating the annotated message - * handler, an instance of the class containing the method is passed to the constructor. Handle methods will be called from this instance when handling messages. To handle a message, simply call - * {@link #handle(com.flowpowered.network.Message)} with the said message as a parameter. The thread calling {@link #handle(com.flowpowered.network.Message)} is the same that calls the handle - * method. - */ -public class AnnotatedMessageHandler { - private final Map, Method> handles = Collections.synchronizedMap(new HashMap, Method>()); - private final Object handler; - - /** - * Constructs a new annotated message handler using the passed object as the source of handle methods. - * - * @param handler The message handler - */ - public AnnotatedMessageHandler(Object handler) { - this.handler = handler; - registerHandlers(); - } - - /** - * Handles the given message. - * - * @param message The message to handle - */ - public void handle(Message message) { - final Method handle = handles.get(message.getClass()); - if (handle == null) { - throw new IllegalArgumentException("No handle for message type [" + message.getClass().getName() + "]"); - } - try { - handle.invoke(handler, message); - } catch (Exception ex) { - throw new RuntimeException("Failed to handle message [" + message + "]", ex); - } - } - - private void registerHandlers() { - for (Method method : handler.getClass().getDeclaredMethods()) { - if (method.isAnnotationPresent(Handle.class)) { - final Class[] parameterTypes = method.getParameterTypes(); - if (parameterTypes.length != 1) { - throw new IllegalStateException("Expected only 1 parameter for message handler method [" + method.getName() + "]"); - } - final Class messageType = parameterTypes[0]; - if (!Message.class.isAssignableFrom(messageType)) { - throw new IllegalStateException("Expected parameter to be a subclass of Message for handler method [" + method.getName() + "]"); - } - method.setAccessible(true); - handles.put(messageType, method); - } - } - } - - /** - * The annotation to mark message handle methods. - */ - @Target (ElementType.METHOD) - @Retention (RetentionPolicy.RUNTIME) - public static @interface Handle { - } -} diff --git a/src/main/java/com/flowpowered/network/util/ByteBufUtils.java b/src/main/java/com/flowpowered/network/util/ByteBufUtils.java deleted file mode 100644 index 59b6015..0000000 --- a/src/main/java/com/flowpowered/network/util/ByteBufUtils.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.util; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; - -import io.netty.buffer.ByteBuf; - -/** - * A class containing various utility methods that act on byte buffers. - */ -public class ByteBufUtils { - /** - * Reads an UTF8 string from a byte buffer. - * - * @param buf The byte buffer to read from - * @return The read string - * @throws java.io.IOException If the reading fails - */ - public static String readUTF8(ByteBuf buf) throws IOException { - // Read the string's length - final int len = readVarInt(buf); - final byte[] bytes = new byte[len]; - buf.readBytes(bytes); - return new String(bytes, StandardCharsets.UTF_8); - } - - /** - * Writes an UTF8 string to a byte buffer. - * - * @param buf The byte buffer to write too - * @param value The string to write - * @throws java.io.IOException If the writing fails - */ - public static void writeUTF8(ByteBuf buf, String value) throws IOException { - final byte[] bytes = value.getBytes(StandardCharsets.UTF_8); - if (bytes.length >= Short.MAX_VALUE) { - throw new IOException("Attempt to write a string with a length greater than Short.MAX_VALUE to ByteBuf!"); - } - // Write the string's length - writeVarInt(buf, bytes.length); - buf.writeBytes(bytes); - } - - /** - * Reads an integer written into the byte buffer as one of various bit sizes. - * - * @param buf The byte buffer to read from - * @return The read integer - * @throws java.io.IOException If the reading fails - */ - public static int readVarInt(ByteBuf buf) throws IOException { - int out = 0; - int bytes = 0; - byte in; - while (true) { - in = buf.readByte(); - out |= (in & 0x7F) << (bytes++ * 7); - if (bytes > 5) { - throw new IOException("Attempt to read int bigger than allowed for a varint!"); - } - if ((in & 0x80) != 0x80) { - break; - } - } - return out; - } - - /** - * Writes an integer into the byte buffer using the least possible amount of bits. - * - * @param buf The byte buffer to write too - * @param value The integer value to write - */ - public static void writeVarInt(ByteBuf buf, int value) { - byte part; - while (true) { - part = (byte) (value & 0x7F); - value >>>= 7; - if (value != 0) { - part |= 0x80; - } - buf.writeByte(part); - if (value == 0) { - break; - } - } - } - - /** - * Reads an integer written into the byte buffer as one of various bit sizes. - * - * @param buf The byte buffer to read from - * @return The read integer - * @throws java.io.IOException If the reading fails - */ - public static long readVarLong(ByteBuf buf) throws IOException { - long out = 0; - int bytes = 0; - byte in; - while (true) { - in = buf.readByte(); - out |= (in & 0x7F) << (bytes++ * 7); - if (bytes > 10) { - throw new IOException("Attempt to read long bigger than allowed for a varlong!"); - } - if ((in & 0x80) != 0x80) { - break; - } - } - return out; - } - - /** - * Writes an integer into the byte buffer using the least possible amount of bits. - * - * @param buf The byte buffer to write too - * @param value The long value to write - */ - public static void writeVarLong(ByteBuf buf, long value) { - byte part; - while (true) { - part = (byte) (value & 0x7F); - value >>>= 7; - if (value != 0) { - part |= 0x80; - } - buf.writeByte(part); - if (value == 0) { - break; - } - } - } -} diff --git a/src/test/java/com/flowpowered/network/fake/ChannelHandlerContextFaker.java b/src/test/java/com/flowpowered/network/fake/ChannelHandlerContextFaker.java deleted file mode 100644 index de56906..0000000 --- a/src/test/java/com/flowpowered/network/fake/ChannelHandlerContextFaker.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.fake; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import io.netty.buffer.Unpooled; -import io.netty.channel.Channel; -import io.netty.channel.ChannelConfig; - -import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; - -public class ChannelHandlerContextFaker { - private static FakeChannelHandlerContext context = null; - private static Channel channel = null; - private static ChannelConfig config = null; - private static ByteBufAllocator alloc = null; - - public static FakeChannelHandlerContext setup() { - if (context == null) { - alloc(); - context = Mockito.mock(FakeChannelHandlerContext.class, Mockito.CALLS_REAL_METHODS); - channel = Mockito.mock(Channel.class); - config = Mockito.mock(ChannelConfig.class); - Mockito.doReturn(channel).when(context).channel(); - Mockito.when(channel.config()).thenReturn(config); - Mockito.when(config.getAllocator()).thenReturn(alloc); - Answer answer = new Answer() { - @Override - public ByteBuf answer(InvocationOnMock invocation) throws Throwable { - ByteBuf buffer = Unpooled.buffer(); - buffer.retain(); - return buffer; - } - }; - Mockito.when(alloc.buffer()).thenAnswer(answer); - Mockito.when(alloc.buffer(Mockito.anyInt())).thenAnswer(answer); - } - return context; - } - - public static ByteBufAllocator alloc() { - if (alloc == null) { - alloc = Mockito.mock(ByteBufAllocator.class); - } - return alloc; - } -} diff --git a/src/test/java/com/flowpowered/network/fake/FakeChannelHandlerContext.java b/src/test/java/com/flowpowered/network/fake/FakeChannelHandlerContext.java deleted file mode 100644 index a6cc2f8..0000000 --- a/src/test/java/com/flowpowered/network/fake/FakeChannelHandlerContext.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.fake; - -import io.netty.buffer.ByteBufAllocator; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; - -import java.util.concurrent.atomic.AtomicReference; - -import io.netty.buffer.ByteBuf; - -public abstract class FakeChannelHandlerContext implements ChannelHandlerContext { - private AtomicReference ref; - - public void setReference(AtomicReference ref) { - this.ref = ref; - } - - @Override - public ChannelHandlerContext fireChannelRead(Object msg) { - if (ref != null && msg instanceof ByteBuf) { - ref.set((ByteBuf) msg); - } - return this; - } - - @Override - public abstract Channel channel(); - - @Override - public boolean isRemoved() { - return false; - } - - @Override - public ByteBufAllocator alloc() { - return ChannelHandlerContextFaker.alloc(); - } -} - diff --git a/src/test/java/com/flowpowered/network/pipeline/MessageProcessorDecoderTest.java b/src/test/java/com/flowpowered/network/pipeline/MessageProcessorDecoderTest.java deleted file mode 100644 index a54dac6..0000000 --- a/src/test/java/com/flowpowered/network/pipeline/MessageProcessorDecoderTest.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.pipeline; - -import java.util.LinkedList; -import java.util.Random; -import java.util.concurrent.atomic.AtomicReference; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; - -import org.junit.Test; -import static org.junit.Assert.assertTrue; - -import com.flowpowered.network.fake.ChannelHandlerContextFaker; -import com.flowpowered.network.fake.FakeChannelHandlerContext; -import com.flowpowered.network.processor.MessageProcessor; -import com.flowpowered.network.processor.simple.SimpleMessageProcessor; - -public class MessageProcessorDecoderTest { - private final int LENGTH = 65536; - private final int BREAK = 17652; - - @Test - public void test() throws Exception { - // Preprocessor basically is split into two parts - // Part 1 is just a direct copy - // Part 2 negates all bytes before copying - final AtomicReference processor = new AtomicReference<>(); - MessageProcessorDecoder processorDecoder = new MessageProcessorDecoder(null) { - @Override - protected MessageProcessor getProcessor() { - return processor.get(); - } - }; - - // Set up a fake ChannelHandlerContext - FakeChannelHandlerContext fake = ChannelHandlerContextFaker.setup(); - AtomicReference ref = new AtomicReference<>(); - fake.setReference(ref); - LinkedList outputList = new LinkedList(); - - Random r = new Random(); - - // Get some random bytes for data - byte[] input = new byte[LENGTH]; - r.nextBytes(input); - - boolean breakOccured = false; - int position = 0; - - for (int i = 0; i < input.length;) { - // Simulate real data read - int burstSize = r.nextInt(512); - // With a 1/10 chance of having an extra-large burst - if (r.nextInt(10) == 0) { - burstSize *= 10; - } - - // Final burst needs to be clamped - if (i + burstSize > input.length) { - burstSize = input.length - i; - } - - // And we can't negate in the middle of a burst - if (i + burstSize > BREAK && !breakOccured) { - burstSize = BREAK - i; - } - - // Write info to a new ByteBuf - final ByteBuf buf = Unpooled.buffer(burstSize); - buf.retain(); - buf.writeBytes(input, i, burstSize); - i += burstSize; - - // Fake a read - processorDecoder.channelRead(fake, buf); - - final ByteBuf returned = ref.get(); - - while (returned != null && true) { - int packetSize = r.nextInt(128) + 1; - if (r.nextInt(10) == 0) { - packetSize *= 20; - } - - if (packetSize > returned.readableBytes()) { - packetSize = returned.readableBytes(); - } - if (position + packetSize > BREAK && !breakOccured) { - packetSize = BREAK - position; - } - if (position + packetSize > LENGTH) { - packetSize = LENGTH - position; - } - - if (packetSize == 0) { - break; - } - - byte[] array = new byte[packetSize]; - - returned.readBytes(array); - position += packetSize; - - if (position == BREAK) { - processor.set(new NegatingProcessor(512)); - breakOccured = true; - } - outputList.add(array); - } - } - - - // Get the output data and combine into one array - byte[] output = new byte[LENGTH]; - int i = 0; - for (byte[] array : outputList) { - for (int j = 0; j < array.length; j++) { - output[i++] = array[j]; - } - } - - for (i = 0; i < input.length; i++) { - byte expected = i < BREAK ? input[i] : (byte) ~input[i]; - if (output[i] != expected) { - for (int j = Math.max(0, i - 10); j <= i + 10; j++) { - System.out.println(j + ") " + Integer.toBinaryString(j < BREAK ? input[j] : (byte) ~input[j]) + " " + Integer.toBinaryString(output[j])); - } - } - - if (i < BREAK) { - assertTrue("Input/Output mismatch at position " + i + ". Expected " + input[i] + " but got " + output[i] + ". Break is: " + BREAK, output[i] == input[i]); - } else { - assertTrue("Input/Output mismatch at position " + i + ", after the processor change. Expected " + (byte) ~input[i] + " but got " + output[i] + ". Break is: " + BREAK, output[i] == (byte) ~input[i]); - } - } - } - - private static class NegatingProcessor extends SimpleMessageProcessor { - byte[] buffer = new byte[65536]; - int readPointer = 0; - int writePointer = 0; - int mask = 0xFFFF; - - public NegatingProcessor(int capacity) { - super(capacity); - } - - @Override - protected void writeEncode(byte[] buf, int length) { - throw new UnsupportedOperationException("Test not written for encode."); - } - - @Override - protected int readEncode(byte[] buf) { - throw new UnsupportedOperationException("Test not written for encode."); - } - - @Override - protected void writeDecode(byte[] buf, int length) { - for (int i = 0; i < length; i++) { - buffer[(writePointer++) & mask] = (byte) ~buf[i]; - } - } - - @Override - protected int readDecode(byte[] buf) { - int i; - for (i = 0; i < buf.length && readPointer < writePointer; i++) { - buf[i] = buffer[(readPointer++) & mask]; - } - return i; - } - } -} diff --git a/src/test/java/com/flowpowered/network/util/ByteBufUtilsTest.java b/src/test/java/com/flowpowered/network/util/ByteBufUtilsTest.java deleted file mode 100644 index 7065941..0000000 --- a/src/test/java/com/flowpowered/network/util/ByteBufUtilsTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of Flow Network, licensed under the MIT License (MIT). - * - * Copyright (c) 2013 Flow Powered - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.flowpowered.network.util; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import org.junit.Test; - -import static org.junit.Assert.fail; - -public class ByteBufUtilsTest { - @Test - public void testVarInt() throws Exception { - final ByteBuf test = Unpooled.buffer(); - ByteBufUtils.writeVarInt(test, 1); - final int varInt = ByteBufUtils.readVarInt(test); - if (varInt != 1) { - fail("The buffer had 1 wrote to it but received " + varInt + " instead!"); - } - } - - @Test - public void testUtf8() throws Exception { - final ByteBuf test = Unpooled.buffer(); - ByteBufUtils.writeUTF8(test, "Hello"); - final String utf8String = ByteBufUtils.readUTF8(test); - if (!"Hello".equals(utf8String)) { - fail("The buffer had hello wrote to it but received " + utf8String + " instead!"); - } - boolean exceptionThrown = false; - try { - ByteBufUtils.writeUTF8(test, new String(new byte[Short.MAX_VALUE + 1])); - } catch (Exception ignore) { - exceptionThrown = true; - } - if (!exceptionThrown) { - fail("Writing more than Short.MAX_VALUE as a UTF8 String to the ByteBuf should have thrown an exception but it did not!"); - } - } -} diff --git a/stylesheet.css b/stylesheet.css new file mode 100644 index 0000000..cebb4fd --- /dev/null +++ b/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; + width:100%; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +}