public bool SendBufferToFile() { bool result = false; DirectoryInfo directory = new DirectoryInfo(FileDirectory); if (!directory.Exists) { directory.Create(); } string path = String.Format(@"{0}//{1}", FileDirectory, FileName); //if (File.Exists(path)) //{ // File.Delete(path); // File.Create(path); //} using (StreamWriter writer = File.AppendText(path)) { lock (locker) { foreach (Packet packet in PacketBuffer) { CustomPacket newPacket = new CustomPacket(packet); writer.WriteLine(newPacket.ToString()); } PacketBuffer.Clear(); result = true; } } return(result); }
private void Reset() { state = ConnectionState.Idle; lastIncomingSequence = SequenceId.Max; outgoingSequenceNumber = SequenceId.Max; pendingOutSequenceNumber = outgoingSequenceNumber; outSequenceNumber = 0; challengeNonce = 0; connectInfo = new ConnectInfo(); tendIn.Clear(); tendOut.Clear(); incomingPacketBuffer.Clear(); receivedNotifications.Clear(); lastStateChange = monotonicClock.NowMilliseconds(); lastValidHeader = monotonicClock.NowMilliseconds(); lastSentPackets = monotonicClock.NowMilliseconds(); }
public bool ProcessNextSegment(byte[] nextSegment, int offset, int len, out IPacket packet) { packet = null; CurrentPacket = null; lock (PacketBuffer) { if (nextSegment.Length > 0) { PacketBuffer.AddRange(new ByteArraySegment(nextSegment, offset, len)); } if (PacketBuffer.Count == 0) { return(false); } if (CurrentPacket == null) { var packetId = PacketBuffer[0]; var createPacket = ServerBound ? PacketReader.ServerBoundPackets[packetId] : PacketReader.ClientBoundPackets[packetId]; if (createPacket != null) { CurrentPacket = createPacket(); } else { _trace.TraceData(TraceEventType.Error, 0, $"Unable to read packet type with Id #{packetId:X2}"); PacketBuffer.Clear(); return(false); } } if (CurrentPacket != null) { using (var listStream = new ByteListMemoryStream(PacketBuffer, 1)) { using (var ms = new McStream(listStream)) { try { CurrentPacket.ReadPacket(ms); } catch (EndOfStreamException) { _trace.TraceData(TraceEventType.Error, 0, $"unexpected end of packet stream"); return(false); } } PacketBuffer.RemoveRange(0, (int)listStream.Position); } packet = CurrentPacket; CurrentPacket = null; PreviousPacket = packet; } return(PacketBuffer.Count > 0); } }