public void ReceivePacket(HastyPacket packet) { lock (packetsToProcess) { packetsToProcess.Add(packet); } }
void InternalPacket(HastyPacket packet) { log.Debug("Received internal packet: {0}", packet); var octetReader = new OctetReader(packet.Octets, log); octetReader.ReadUint8(); var streamReader = new StreamReader(octetReader, log); switch (packet.Command) { case Commands.ConnectResult: ConnectResult(streamReader); break; case Commands.LoginResult: LoginResult(streamReader); break; case Commands.StreamData: StreamData(streamReader); break; case Commands.Ping: Ping(streamReader); break; case Commands.Pong: Pong(streamReader); break; default: throw new Exception(string.Format("Unknown internal command {0}", packet.Command)); } }
public void Add(byte[] octets) { // log.Debug("Adding to receive stream:{0:X}", octets); queue.Enqueue(octets, 0, octets.Length); HastyPacket packet = null; do { var octetCount = queue.Peek(targetBuffer, 0, targetBuffer.Length); if (octetCount == 0) { // log.Debug("octetCount zero"); return; } int newOffset; packet = PacketDecoder.Decode(targetBuffer, 0, octetCount, out newOffset, log); if (packet != null) { // log.Debug("Got packet!"); queue.Skip(newOffset); packetReceiver.ReceivePacket(packet); } else { // log.Debug("No packet so far"); } } while (packet != null); }
private void ProcessPacket(HastyPacket packet) { var commandTarget = targetCreator.FindCommandTarget(packet.Command, 1); if (commandTarget == null) { var e = new Exception(string.Format("Couldn't find command {0}", packet.Command)); log.Exception(e); throw e; } var octetReader = new OctetReader(packet.Octets, log); octetReader.ReadUint8(); var stream = new StreamReader(octetReader, log); commandTarget.Execute(stream); }
void WritePacket(HastyPacket packet) { if (connection == null) { log.Warning("CAN NOT SEND. NO CONNECTION!"); return; } // log.Debug("Sending packet:{0} {1}", packet, OctetBufferDebug.OctetsToHex(packet.Octets)); var stream = createStreamWriter(); stream.WriteLength((ushort)packet.Length); stream.WriteOctets(packet.Octets); var octets = stream.Close(); connection.Write(octets); }
private void OnPacketRead(HastyPacket packet) { InternalPacket(packet); }
internal void Write(byte[] octets) { var packet = new HastyPacket(octets); WritePacket(packet); }