Skip to content

Instantly share code, notes, and snippets.

@volgar1x
Last active December 16, 2015 14:09
Show Gist options
  • Save volgar1x/5446423 to your computer and use it in GitHub Desktop.
Save volgar1x/5446423 to your computer and use it in GitHub Desktop.
package org.mambo.protocol
import org.mambo.core.io.Buffer
/**
* @author Blackrush
*/
trait Serializable {
val deserializer: Deserializer
def serialize(buf: Buffer)
val messageId = deserializer.messageId
}
/**
* @author Blackrush
*/
trait Deserializer {
type Target
val messageId: Int
def deserialize(buf: Buffer): Target
}
/**
* @author Blackrush
*/
abstract class EmptyMessage(override val messageId: Int) extends Deserializer with Serializable {
type Target <: EmptyMessage
override val deserializer: Target
def serialize(buf: Buffer) {}
def deserialize(buf: Buffer) = deserializer
}
case object HelloGame extends EmptyMessage(1) {
type Target = HelloGame.type
val deserializer = this
}
object HelloLogin extends Deserializer {
val messageId = 2
case class Message(ticket: String) extends Serializable {
val deserializer = HelloLogin
def serialize(buf: Buffer) {
buf.writeString(ticket)
}
}
type Target = Message
def apply(ticket: String) = Message(ticket)
def deserialize(buf: Buffer) = Message(buf.readString())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment