public void Write(PacketBuffer packet) { if (packet == null) throw new ArgumentNullException(nameof(packet)); packet.Write(Time); }
/// <summary> /// BSON 패킷 구조를 따르는 PacketBuffer을 BSON Data로 변환 시키는 메서드 /// </summary> /// <param name="buffer">BSON 패킷 구조를 따르는 Packet Buffer</param> /// <returns>BSON Data</returns> public dynamic Decode(IChannel channel, PacketBuffer buffer) { //버퍼 읽기 시작을 알림 buffer.BeginBufferIndex(); if (buffer.AvailableBytes() < 5) //버퍼길이가 5미만이면 리턴 return null; uint len = buffer.ReadUInt32(); if (len > buffer.AvailableBytes()) { //버퍼의 길이가 실제 패킷 길이보다 모자름으로, 리셋후 리턴 buffer.ResetBufferIndex(); return null; } var data = new byte[len]; buffer.ReadBytes(data); buffer.EndBufferIndex(); var stream = new MemoryStream(data); dynamic res = Serializer.Deserialize(new BsonReader(stream)); stream.Dispose(); return res; }
public object Decode(IChannel channel, PacketBuffer buffer) { //버퍼 읽기 시작을 알림 buffer.BeginBufferIndex(); if (buffer.AvailableBytes() < 6) //버퍼길이가 5미만이면 리턴 return null; buffer.ReadByte(); uint len = buffer.ReadUInt32(); if (len > buffer.AvailableBytes()) { //버퍼의 길이가 실제 패킷 길이보다 모자름으로, 리셋후 리턴 buffer.ResetBufferIndex(); return null; } var data = new byte[len]; buffer.ReadBytes(data); buffer.EndBufferIndex(); var stream = new MemoryStream(data); var res = Unpacker.Create(stream).Unpack<MessagePackObject>(); stream.Dispose(); return res; }
public void Write(PacketBuffer packet) { if (packet == null) throw new ArgumentNullException(nameof(packet)); Settings.Write(packet); }
public dynamic Decode(IChannel channel, PacketBuffer buffer) { buffer.BeginBufferIndex(); if(buffer.AvailableBytes() > MaxBufferSize) { channel.Disconnect(); return null; } if (buffer.AvailableBytes() == 0) return null; Request request; try { request = Request.Parse(buffer); } catch (Exception) { buffer.ResetBufferIndex(); return null; } buffer.EndBufferIndex(); return request; }
public void Write(PacketBuffer packet) { if (packet == null) throw new ArgumentNullException(nameof(packet)); packet.Write(ChunkSize); packet.Write(DataHash); packet.Write(Data, 0, Data.Length); }
public void Write(PacketBuffer packet) { if (packet == null) throw new ArgumentNullException(nameof(packet)); packet.Write((byte)'A'); packet.Write((byte)'R'); packet.Write((byte)'M'); packet.Write(Arm); }
public PacketBuffer Encode(IChannel channel, object data) { var str = data as string; if (str == null) return null; var buffer = new PacketBuffer(); buffer.Write(_encoding.GetBytes(str)); buffer.WriteBytes(new byte[]{13, 10}); return buffer; }
public object Decode(IChannel channel, PacketBuffer buffer) { var index = buffer.FindBytes(new byte[] {13, 10}); if (index == -1) return null; string data = _encoding.GetString(buffer.ReadBytes((int) index)); buffer.ReadBytes(2); return data; }
/// <summary> /// BSON Encode 함수 /// /// 입력받는 bson 데이터를 BSON 패킷 구조로 변환 /// </summary> /// <param name="data">BSON Data</param> /// <returns>BSON 패킷 구조를 따르는 PacketBuffer</returns> public PacketBuffer Encode(IChannel channel, dynamic data) { var buffer = new PacketBuffer(); var stream = new MemoryStream(); Serializer.Serialize(new BsonWriter(stream), data); stream.Position = 0; buffer.Write((UInt32) stream.Length); buffer.Write(stream); stream.Dispose(); return buffer; }
public PacketBuffer Encode(IChannel channel, dynamic data) { var buffer = new PacketBuffer(); if (data is string) InputBuffer(buffer, 1, System.Text.Encoding.UTF8.GetBytes(data)); else if (data is byte[]) InputBuffer(buffer, 2, data); else if (data is Ping) return null; else if (data is Pong) return null; else return null; return buffer; }
public void PacketBufferBytesTest() { var data = new byte[] {1, 0, 0, 5}; var buffer = new PacketBuffer(); buffer.WriteBytes(data); buffer.BeginBufferIndex(); var temp = buffer.ReadBytes(4); for (int i = 0; i < temp.Length; i++) { if(temp[i] != data[i]) throw new Exception("PacketBuffer error"); } }
public static Request Parse(PacketBuffer buffer) { var request = new Request(); request._postData.Add("FILES", new Dictionary<string, string>()); request.SetFirstHeader(buffer.ReadLine()); if (!request.GetHeaders(buffer)) throw new Exception("Header Error"); if (request.GetMethod() == "POST" && !request.SetPostData(buffer)) throw new Exception("Header Error"); return request; }
public PacketBuffer Encode(IChannel channel, object data) { if (!(data is MessagePackObject)) return null; var buffer = new PacketBuffer(); buffer.WriteByte(1); var stream = new MemoryStream(); Packer.Create(stream).Pack((MessagePackObject)data); stream.Position = 0; buffer.Write((UInt32)stream.Length); buffer.Write(stream); stream.Dispose(); return buffer; }
public void PacketBufferInt32Test() { var buffer = new PacketBuffer(); buffer.WriteInt32(1); buffer.WriteInt32(0); buffer.WriteInt32(0); buffer.WriteInt32(5); buffer.BeginBufferIndex(); long m = 0; for (int i = 0; i < 4; i++) m += buffer.ReadInt32(); if (m != 6) { throw new Exception("PacketBuffer error"); } }
public void BufferUnstableTest() { var buffer = new PacketBuffer<bool>( new PacketChecker<bool>( new PacketPadder<bool>(new UnstableTestChannel(2)), ByteChannelOptions.Default)); var data = new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; byte[] received = new byte[0]; buffer.Receive += (sender, message) => received = ByteHelper.Combine(received, message.Data.ToArray()); buffer.Send(new byte[0]); buffer.Send(data); CollectionAssert.AreEqual(data, received); }
public void SendMessage(int index, string message, MessageColors color) { var buffer = new PacketBuffer(); buffer.AddInteger((int)SMessage); buffer.AddInteger((int)color); buffer.AddString(message); // Use index -1 to broadcast from server to all players if (index != -1) { SendData(index, buffer.ToArray()); } else { BroadcastData(buffer.ToArray()); } buffer.Dispose(); }
/// <summary> /// 取得委託價函式 /// </summary> /// <param name="type">委託價格式(0=1Byte 1=2Byte)</param> /// <param name="buffer">即時資料Buffer</param> /// <returns>返回值:委託價格</returns> private static float EntrustPrice(byte type, PacketBuffer buffer) { double dPrice = 0; if (type == 0) { if (buffer[0] < 0xff) //0xff=無價位 { dPrice = buffer[0] * 0.01; } ++buffer.Position; } else { dPrice = ((buffer[0] << 8) + buffer[1]) * 0.01; buffer.Position += 2; } return((float)dPrice); }
private static bool Serialise(Text2DManager textManager, PacketBuffer packet, BinaryWriter writer, ref uint count) { Shapes.Text2D shape = new Shapes.Text2D(null); uint progressMarker = 0; int dataResult = 1; bool shapeOk = true; foreach (TextEntry entry in textManager.Entries) { ++count; ConvertToShape(shape, entry); shape.WriteCreate(packet); shapeOk = packet.FinalisePacket(); if (shapeOk) { packet.ExportTo(writer); if (shape.IsComplex) { dataResult = 1; while (dataResult > 0 && shapeOk) { shape.WriteData(packet, ref progressMarker); shapeOk = packet.FinalisePacket(); if (shapeOk) { packet.ExportTo(writer); } } shapeOk = dataResult == 0; } } if (!shapeOk) { return(false); } } return(true); }
static void OnLogin(PacketBuffer buffer) {//TRAINER_DATA TrainerID (Integer) Prefab Index(short) AssetID (Integer) Username (String) ... LOCATION BinaryReader reader = buffer.StartReading(); reader.ReadString(); //String Message player.ID = reader.ReadInt32(); //TrainerID reader.ReadInt16(); //Prefab Index player.TrainerAssetID = reader.ReadInt32(); //AssetID (Integer player.Username = reader.ReadString(); //Username (String Pokemon pokeData = new Pokemon(); SpawnData <System.Object> SpawnData = new SpawnData <System.Object>(); SpawnData.Data = (System.Object)pokeData; player.spawnQueue = new Queue <SpawnData <System.Object> >(); player.spawnQueue.Enqueue(SpawnData); //Pokemon pokeData1 = (Pokemon)player.spawnQueue.Peek(); Console.WriteLine(">> Player[ID = " + player.ID + "]Username : +" + player.Username + " Has logged on "); }
private static void AcceptCallback(IAsyncResult ar) { Socket socket = _serverSocket.EndAccept(ar); _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null); byte[] tempData = new byte[1024]; socket.ReceiveTimeout = (int)Constants.CONNECT_TIMEOUT * 1000; try { PacketBuffer buffer = new PacketBuffer(); buffer.WriteServerPacket(ServerPackets.SAskIfClientOrServer); SendDataTo(socket, buffer.ToArray()); buffer.Dispose(); socket.Receive(tempData); PacketBuffer receivedbuffer = new PacketBuffer(tempData); ClientPackets packet = receivedbuffer.ReadClientPacket(); string key = receivedbuffer.ReadString(); int index = receivedbuffer.ReadInteger(); if (packet != ClientPackets.CSendKey) { throw new Exception("Wrong packet sent to server."); } if (key == ServerHandleNetworkData.masterServerKey) { ConnectMatchServer(socket, index); } else if (key == ServerHandleNetworkData.clientKey) { ConnectPlayer(socket); } else { throw new Exception("Wrong key sent to server."); } } catch { socket.Close(); } }
public void HandleStack(int index, byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); var from = buffer.GetString(); var to = buffer.GetString(); buffer.Dispose(); var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]); if (Transactions.StackItems(from, to, player) == -1) { SendMessage(index, "Invalid item, item cannot stack, or stack is full.", Warning); } ; SendInventory(index); }
private static void Handle_RequestEnterQuickPlay(int index, byte[] data) { PacketBuffer buffer = new PacketBuffer(); buffer.WriteBytes(data); int packetNum = buffer.ReadInteger(); string msg = buffer.ReadString(); buffer.Dispose(); //Json parse UserSession userSession = SqlConnection.InitialazeUserSession(msg); userSession.mainTeam[0] = SqlConnection.LoadUserChar(userSession.mainTeamNames[0], userSession); userSession.mainTeam[1] = SqlConnection.LoadUserChar(userSession.mainTeamNames[1], userSession); userSession.mainTeam[2] = SqlConnection.LoadUserChar(userSession.mainTeamNames[2], userSession); Console.WriteLine(index + string.Format(" : Entered 'QuickPlay' mode. (Rating = {0}, teamPower = {1})", userSession.rating, userSession.mainTeam[0].power + userSession.mainTeam[1].power + userSession.mainTeam[2].power)); QuickPlayLobby.EnterQuery(userSession); }
/// <summary> /// Write this message to <paramref name="packet"/>. /// </summary> /// <param name="packet">The packet to write to.</param> /// <returns>True</returns> public bool Write(PacketBuffer packet) { packet.WriteBytes(new byte[] { CameraID }, true); packet.WriteBytes(new byte[] { Reserved1 }, true); packet.WriteBytes(BitConverter.GetBytes(Reserved2), true); packet.WriteBytes(BitConverter.GetBytes(X), true); packet.WriteBytes(BitConverter.GetBytes(Y), true); packet.WriteBytes(BitConverter.GetBytes(Z), true); packet.WriteBytes(BitConverter.GetBytes(DirX), true); packet.WriteBytes(BitConverter.GetBytes(DirY), true); packet.WriteBytes(BitConverter.GetBytes(DirZ), true); packet.WriteBytes(BitConverter.GetBytes(UpX), true); packet.WriteBytes(BitConverter.GetBytes(UpY), true); packet.WriteBytes(BitConverter.GetBytes(UpZ), true); packet.WriteBytes(BitConverter.GetBytes(Near), true); packet.WriteBytes(BitConverter.GetBytes(Far), true); packet.WriteBytes(BitConverter.GetBytes(FOV), true); return(true); }
internal static MitakeNotice Decode(int serial, PacketBuffer buffer) { int iBodySize = 0; string sTime = null, sText = null; int iSerial = 0; byte bNumber = 0, bCount = 0; iBodySize = buffer.Data[3] - 5; buffer.Position = 7; //移動至資料結構(時間欄位) //取得序號 iSerial = (buffer[0] << 8) + buffer[1]; buffer.Position += 2; bNumber = buffer[0]; //取得封包編號(0 = 標題) ++buffer.Position; if (bNumber == 0) { //取得封包個數 bCount = buffer[0]; ++buffer.Position; //取得公告時間 sTime = string.Format("{0}:{1}", buffer[0].ToString("0#"), buffer[1].ToString("0#")); buffer.Position += 2; iBodySize -= 6; } else { iBodySize -= 3; } if (iBodySize > 0) { sText = Encoding.GetEncoding("big5").GetString(buffer.Data, buffer.Position, iBodySize); } return(__cNoticeUtil.Merge(serial, iSerial, bNumber, bCount, sTime, sText)); //封包合併(如果合併完成會傳出公告資訊類別, 否則回傳null) }
private static void HandleRotationStepback(GamePlayerUDP player, byte[] data) { using (PacketBuffer buffer = new PacketBuffer()) { buffer.WriteBytes(data); buffer.ReadInteger(); ObjectType type = (ObjectType)buffer.ReadInteger(); int index = buffer.ReadInteger(); int StepBackIndex = buffer.ReadInteger(); switch (type) { case ObjectType.spell: try { player.room.dynamicObjectsList.Get(index).rotation.UdpateStepBack(StepBackIndex); } catch (Exception ex) { if (ex is NullReferenceException || ex is IndexOutOfRangeException) { return; } Global.serverForm.Debug(ex + ""); } break; case ObjectType.staticObjects: try { player.room.staticObjectsList.Get(index).rotation.UdpateStepBack(StepBackIndex); } catch (Exception ex) { if (ex is NullReferenceException || ex is IndexOutOfRangeException) { return; } Global.serverForm.Debug(ex + ""); } break; } } }
private static void PacketDecode(Socket socket, SocketToken Token, bool IsDecode) { int iCheck = 0; PacketBuffer cPacket = Token.ReceiveBuffer; cPacket.Position = -1; while (++cPacket.Position < cPacket.Length) { iCheck = VerifyPacket(cPacket); switch (iCheck) { case -1: //未知封包 if (Token.IsStart) { if (cPacket[0] == 0x0b) { if (McpDecoder.McpDecode(socket, Token)) { continue; } } Token.IsStart = false; } Token.AddTemp(); break; case 0: //完整封包 int iSize = cPacket[3] + 4; Token.SetPackage(iSize); DecodeFinance(socket, Token.StockEvent, IsDecode); cPacket.Position += (iSize - 1); Token.IsStart = true; break; case 1: //末端斷包 while (++cPacket.Position < cPacket.Length) { Token.AddTemp(); } break; } } }
public void SendEntities(User user) { foreach (var npc in NpcTalk) { var buffer = new PacketBuffer(0x8, user); buffer.WriteUInt16(npc.EntityId); buffer.WriteUInt16(2); // Type? 2 = NPC buffer.WriteUInt32((uint)npc.Type); buffer.WriteUInt32(0); // ? buffer.WriteUInt16(0); // ? var pos = PointObjects.FirstOrDefault(x => x.Id == npc.PosId); if (pos != null) { buffer.WriteUInt16((ushort)pos.X); buffer.WriteUInt16((ushort)pos.Y); buffer.WriteUInt16((ushort)pos.X); buffer.WriteUInt16((ushort)pos.Y); } else { Program.logger.Error("------ Entity position {0} not found for NPC {1} in map {2} ({3})", npc.PosId, npc.Type, Name, Id); buffer.WriteUInt16(0); buffer.WriteUInt16(0); buffer.WriteUInt16(0); buffer.WriteUInt16(0); } buffer.WriteString(Methods.Utf8Convert(Data.CharacterInfo[npc.Type].Name)); buffer.WriteByte(0x00); buffer.WriteHexString("00 80 00 00 00 00 00 00 00 00 00 00"); // ? buffer.WriteUInt16((ushort)npc.PosId); buffer.WriteUInt16((ushort)npc.HeadMarkType); // Head marking buffer.WriteUInt16(0); // ? Program.logger.Debug("Sending entity packet: {0}", Util.ByteToHex(buffer.GetBuffer())); buffer.Send(); } }
public override void Deserialize(byte[] data) { PacketBuffer buffer = new PacketBuffer(); buffer.WriteBytes(data); // Read position Vector3 receivedPosition = buffer.ReadVector3(); transform.position = receivedPosition; // Read rotation Vector3 receivedRotation = buffer.ReadVector3(); transform.rotation = Quaternion.identity * Quaternion.Euler(receivedRotation); //Debug.Log(string.Format("Deserialized object , rot = {0}", receivedRotation)); }
internal ServerPacket RecieveSinglePacketIfAvailable(PacketBuffer pBuffer) { if (pBuffer.Length <= 0) { return(null); } ServerPacketId packetid = (ServerPacketId)pBuffer[0]; ServerPacketInfo info; if (!_registry.TryGetValue(packetid, out info)) { InvokeOnUnknownPacket(string.Format("Invalid packet {0}, clearing buffer.", packetid), pBuffer.buffer); pBuffer.ClearIncoming(); } else { ushort packetlen; if (!info.isFixedLen) { if (pBuffer.Length < 3) { return(null); } packetlen = (ushort)(pBuffer[1] << 8 | pBuffer[2]); } else { packetlen = info.FixedLength; } if (pBuffer.Length >= packetlen) { ServerPacket packet = null; if (info.Factory != null) { packet = info.Factory(new PacketReader(Version, pBuffer, packetlen)); } pBuffer.RemoveBufferHead(packetlen); return(packet); } } return(null); }
/// <summary> /// Read an <see cref="UpdateMessage"/> for this shape. /// </summary> /// <param name="packet">The buffer from which the reader reads.</param> /// <param name="reader">The stream to read message data from.</param> /// <returns><c>true</c> if the message is successfully read.</returns> /// <remarks> /// Respects the <see cref="UpdateFlag"/> values, only modifying requested data. /// </remarks> public virtual bool ReadUpdate(PacketBuffer packet, BinaryReader reader) { UpdateMessage up = new UpdateMessage(); if (up.Read(reader)) { if ((up.Flags & (ushort)UpdateFlag.UpdateMode) == 0) { // Full update. _data.Attributes = up.Attributes; } else { // Partial update. if ((up.Flags & (short)UpdateFlag.Position) != 0) { _data.Attributes.X = up.Attributes.X; _data.Attributes.Y = up.Attributes.Y; _data.Attributes.Z = up.Attributes.Z; } if ((up.Flags & (short)UpdateFlag.Rotation) != 0) { _data.Attributes.RotationX = up.Attributes.RotationX; _data.Attributes.RotationY = up.Attributes.RotationY; _data.Attributes.RotationZ = up.Attributes.RotationZ; _data.Attributes.RotationW = up.Attributes.RotationW; } if ((up.Flags & (short)UpdateFlag.Scale) != 0) { _data.Attributes.ScaleX = up.Attributes.ScaleX; _data.Attributes.ScaleY = up.Attributes.ScaleY; _data.Attributes.ScaleZ = up.Attributes.ScaleZ; } if ((up.Flags & (short)UpdateFlag.Colour) != 0) { _data.Attributes.Colour = up.Attributes.Colour; } } return(true); } return(false); }
private static void HandleServerPulse(byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); // Packet Type var numPlayers = buffer.GetInteger(); Globals.serverTime = BitConverter.ToInt64(buffer.GetBytes(8), 0); for (var i = 0; i != numPlayers; i++) { var index = buffer.GetInteger(); var Id = buffer.GetString(); var X = buffer.GetFloat(); var Y = buffer.GetFloat(); var Rotation = buffer.GetFloat(); var Health = buffer.GetInteger(); var MaxHealth = buffer.GetInteger(); var Shield = buffer.GetInteger(); var MaxShield = buffer.GetInteger(); var inGame = BitConverter.ToBoolean(buffer.GetBytes(1), 0); // If the buffer is not ourselves, skip the update - need to do not in game characters to remove logged out users if (index == GameLogic.PlayerIndex) { continue; } Types.Player[index].Id = Id; Types.Player[index].X = X; Types.Player[index].Y = Y; Types.Player[index].Rotation = Rotation; Types.Player[index].Health = Health; Types.Player[index].MaxHealth = MaxHealth; Types.Player[index].Shield = Shield; Types.Player[index].MaxShield = MaxShield; } GameLogic.LocalMobs = buffer.GetList <Mob>(); GameLogic.LocalCombat = buffer.GetList <Combat>(); GameLogic.LocalLoot = buffer.GetList <Inventory>(); GameLogic.RealLoot = buffer.GetList <Loot>(); GameLogic.WatchCombat(); buffer.Dispose(); }
/// <summary> /// Handle create messages. /// </summary> /// <param name="msg"></param> /// <param name="packet"></param> /// <param name="reader"></param> /// <returns></returns> protected virtual Error HandleMessage(CreateMessage msg, PacketBuffer packet, BinaryReader reader) { TextEntry text = new TextEntry(); text.ID = msg.ObjectID; text.ObjectFlags = msg.Flags; text.Category = msg.Category; text.Position = new Vector3(msg.Attributes.X, msg.Attributes.Y, msg.Attributes.Z); text.Colour = Maths.ColourExt.ToUnity32(new Maths.Colour(msg.Attributes.Colour)); // Read the text. int textLength = reader.ReadUInt16(); if (textLength > 0) { byte[] textBytes = reader.ReadBytes(textLength); text.Text = System.Text.Encoding.UTF8.GetString(textBytes); } if (msg.ObjectID == 0) { TransientText.Add(text); } else { if (PersistentText.ContainsEntry(text.ID)) { // Object ID already present. Check for replace flag. if ((msg.Flags & (ushort)ObjectFlag.Replace) == 0) { // Not replace flag => error. return(new Error(ErrorCode.DuplicateShape, msg.ObjectID)); } // Replace. PersistentText.Remove(text.ID); } PersistentText.Add(text); } return(new Error()); }
public void TestWriteSizeCheck() { byte[] empty = Array.Empty <byte>(); byte[] random1 = new byte[128]; byte[] random2 = new byte[3072]; byte[] random3 = new byte[262144]; Random gen = new Random(); gen.NextBytes(random1); gen.NextBytes(random2); gen.NextBytes(random3); using var write = new PacketBuffer(); write.WriteByteArray(empty, empty.Length); write.WriteByteArray(random2, random2.Length); write.WriteShortByteArray(random1); Assert.ThrowsException <ArgumentOutOfRangeException>(() => write.WriteShortByteArray(random2)); write.WriteMediumByteArray(random2); Assert.ThrowsException <ArgumentOutOfRangeException>(() => write.WriteMediumByteArray(random3)); }
public void SendPlayerCount() { int ActiveClients = CountActiveClients(); PacketBuffer buffer = new PacketBuffer(); buffer.WriteInt32((int)ServerPackets.SConnectedPlayerCount); buffer.WriteInt32(ActiveClients); for (int i = 0; i < _clients.Length; i++) { if (_clients[i].Socket != null) { SendDataTo(i, buffer.ToArray()); Debug.Log("Player count sended to Client[" + i + "]"); } } buffer.Dispose(); }
public void TestEncrypted() { using var message = new FakeMessage { Text = text }; Span <byte> key = stackalloc byte[64]; RandomNumberGenerator.Fill(key); using var buffer = new PacketBuffer(); message.Encrypt(key); message.WritePacket(buffer, PacketRole.Client); buffer.Position = 0; using var received = new FakeMessage(); received.ReadPacket(buffer, PacketRole.Server); received.Decrypt(key); Assert.AreEqual(text, received.Text); }
private void Read_v1_1(PacketBuffer buf) { Algorithm = ContentAlgorithm.None; Name = buf.ReadString(); Length = Convert.ToInt64(buf.ReadULong()); Attributes = (FileAttributes)buf.ReadUInt(); CreationTime = buf.ReadDate(); LastAccessTime = buf.ReadDate(); LastWriteTime = buf.ReadDate(); Thumbnail = buf.ReadByteArray(); if (buf.Pending >= 32) // This is necessary as VSL 1.1 .NET does not even send an empty 32 byte array as SHA. { SHA256 = buf.ReadByteArray(32); } else { SHA256 = new byte[32]; // We leave an empty 32 byte array to prevent further crashes. } Available = true; }
private void InputBuffer(PacketBuffer buffer, byte type, byte[] data) { var buf = new byte[127]; var stream = new MemoryStream(data); while (true) { int len = stream.Read(buf, 0, 127); if (len == 0) break; buffer.WriteByte((byte)((len != 127 ? 0x80 : 0x0) | type)); buffer.WriteByte((byte)(0x7F & len)); buffer.Write(buf, 0, len); if (len != 127) break; } }
public static void EndMove(User user, int numMoves) { //user.Character.Mover.Task.Dispose(); user.Character.Mover.Moving = false; if (numMoves > 0) { var res = new PacketBuffer(0x18, user); res.WriteUInt16(user.Character.EntityId); res.WriteUInt16(user.Character.X); res.WriteUInt16(user.Character.Y); res.WriteUInt16(user.Character.Mover.Destination.X); res.WriteUInt16(user.Character.Mover.Destination.Y); res.WriteByte(0x2); res.Send(); user.Character.X = user.Character.Mover.Destination.X; user.Character.Y = user.Character.Mover.Destination.Y; } }
/// <summary> /// The primary message handling function. /// </summary> /// <param name="packet"></param> /// <param name="reader"></param> /// <returns></returns> public override Error ReadMessage(PacketBuffer packet, BinaryReader reader) { switch (packet.Header.MessageID) { case (ushort)CategoryMessageID.Name: CategoryNameMessage msg = new CategoryNameMessage(); if (!msg.Read(reader)) { return(new Error(ErrorCode.MalformedMessage)); } AddCategory(msg.CategoryID, msg.ParentID, msg.Name, msg.DefaultActive); break; default: return(new Error(ErrorCode.InvalidMessageID, packet.Header.MessageID)); } return(new Error()); }
public void UpdatePlayer(int index) { var buffer = new PacketBuffer(); var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]); buffer.AddInteger((int)SPlayerUpdate); buffer.AddInteger(player.Health); buffer.AddInteger(player.MaxHealth); buffer.AddInteger(player.Shield); buffer.AddInteger(player.MaxShield); buffer.AddInteger(player.Exp); buffer.AddInteger(player.Level); buffer.AddInteger(player.Weap1Charge); buffer.AddInteger(player.Weap2Charge); buffer.AddInteger(player.Weap3Charge); buffer.AddInteger(player.Weap4Charge); buffer.AddInteger(player.Weap5Charge); SendData(index, buffer.ToArray()); buffer.Dispose(); }
public void ParseChat(int index, byte[] data) { var buffer = new PacketBuffer(); var player = _userService.ActiveUsers.Find(p => p.Id == Types.PlayerIds[index]); buffer.AddBytes(data); buffer.GetInteger(); var str = buffer.GetString(); if (str.ToLower().StartsWith("/c")) { RelayChat(index, str.Substring(3)); } if (str.ToLower().StartsWith(">>")) { var result = Transactions.AdminCommand(index, player, str.Substring(2).TrimStart()); SendMessage(index, result, Notification); XFerLoad(index, 1); } }
private static void Handle_RequestUserAccountDataUpdate(int index, byte[] data) { PacketBuffer buffer = new PacketBuffer(); buffer.WriteBytes(data); int packetNum = buffer.ReadInteger(); string msg = buffer.ReadString(); buffer.Dispose(); //Json parse UserSession userSession = SqlConnection.InitialazeUserSession(msg); userSession.mainTeam[0] = SqlConnection.LoadUserChar(userSession.mainTeamNames[0], userSession); userSession.mainTeam[1] = SqlConnection.LoadUserChar(userSession.mainTeamNames[1], userSession); userSession.mainTeam[2] = SqlConnection.LoadUserChar(userSession.mainTeamNames[2], userSession); ServerTCP.Send_UpdateUserSessionData(index, JsonConvert.SerializeObject(userSession)); ServerTCP.Send_UpdateUserImage(index, SqlConnection.GetUserImage(userSession.login)); }
static void SpamMovePackets() { for (int i = 0; i < PacketCount; i++) { try { // Thread.Sleep(1); //PacketBuffer buffer = clientCore.clientSocket.CreatePacket(PacketTypes.Game); //Header //buffer.StartWriting(true).WriteHeader((byte)GameHeader.Movement).WriteInt(player.TrainerAssetID).WriteVector3(i, 5, 5).WriteVector3Short(5, 4, 13); PacketBuffer buffer = clientCore.clientSocket.CreatePacket(PacketTypes.Special); //Header buffer.StartWriting(true).WriteHeader((byte)SpecialRequest.SendChat).WriteString(i + "Packet"); clientCore.clientSocket.SendPacket(); } catch (Exception e) { } } }
public void ProcessClientPacket(PacketEvent packetEvent) { if (packetEvent.Id != 0x01) { return; } var str = packetEvent.Buffer.ReadString(); if (str.StartsWith(".")) { commandManager.HandleCommand(packetEvent, str); packetEvent.Cancelled = true; return; } var buf = new PacketBuffer(); buf.WriteString(str); buf.Reset(); packetEvent.Buffer = buf; }
/// <summary> /// Overridden to include the triangle count. /// </summary> /// <returns><c>true</c> on success.</returns> /// <param name="packet">Packet to write the message to.</param> public override bool WriteCreate(PacketBuffer packet) { if (!base.WriteCreate(packet)) { return(false); } // Write number of vertices and indices. // Index support to come. uint count = (uint)_vertices.Length; packet.WriteBytes(BitConverter.GetBytes(count), true); count = (uint)_indices.Length; packet.WriteBytes(BitConverter.GetBytes(count), true); byte drawType = (byte)DrawType; packet.WriteBytes(new byte[] { drawType }, false); packet.WriteBytes(BitConverter.GetBytes(_drawWeight), true); return(true); }
private static void DownloadData(byte[] data) { var buffer = new PacketBuffer(); buffer.AddBytes(data); buffer.GetInteger(); GameLogic.PlayerIndex = buffer.GetInteger(); // Index on server side var suppress = buffer.GetInteger(); var i = GameLogic.PlayerIndex; Types.Player[i] = new User { Id = buffer.GetString(), Name = buffer.GetString(), X = buffer.GetFloat(), Y = buffer.GetFloat(), Rotation = buffer.GetFloat(), Health = buffer.GetInteger(), MaxHealth = buffer.GetInteger(), Shield = buffer.GetInteger(), MaxShield = buffer.GetInteger(), Rank = buffer.GetString(), Credits = buffer.GetInteger(), Exp = buffer.GetInteger(), Level = buffer.GetInteger(), Weap1Charge = buffer.GetInteger(), Weap2Charge = buffer.GetInteger(), Weap3Charge = buffer.GetInteger(), Weap4Charge = buffer.GetInteger(), Weap5Charge = buffer.GetInteger(), Inventory = buffer.GetList <Inventory>() }; buffer.Dispose(); if (suppress == 1) { return; } MenuManager.Clear(1); Globals.graphicsChange = Globals.Fullscreen; InterfaceGUI.AddChats(@"User data downloaded.", Color.DarkOliveGreen); }
public void PacketBufferByteTest() { var buffer = new PacketBuffer(); buffer.WriteByte(1); buffer.WriteByte(0); buffer.WriteByte(0); buffer.WriteByte(5); buffer.BeginBufferIndex(); if(buffer.ReadByte() != 1) throw new Exception("PacketBuffer error"); if (buffer.ReadByte() != 0) throw new Exception("PacketBuffer error"); if (buffer.ReadByte() != 0) throw new Exception("PacketBuffer error"); if (buffer.ReadByte() != 5) throw new Exception("PacketBuffer error"); }
public dynamic Decode(IChannel channel, PacketBuffer buffer) { buffer.BeginBufferIndex(); var stream = new MemoryStream(); while (true) { if (buffer.AvailableBytes() < 2) return null; byte frameH = buffer.ReadByte(); byte frameP = buffer.ReadByte(); int len = frameP & 0x7F; if (len > 0x7D) { if (buffer.AvailableBytes() < 2) return null; for (var i = 0; i < 2; i++) len = (len << 8) + buffer.ReadByte(); if ((frameP & 0x7F) == 0x7F) { if (buffer.AvailableBytes() < 2) return null; for (var i = 0; i < 2; i++) len = (len << 8) + buffer.ReadByte(); } } if (buffer.AvailableBytes() < 4 + len) return null; byte[] key = (frameP & 0x80) == 0x80 ? buffer.ReadBytes(4) : null; byte[] data = null; if (key == null) { data = buffer.ReadBytes(len); } else { data = new byte[len]; for (int i = 0; i < len; i++) data[i] = (byte) (buffer.ReadByte() ^ key[i%4]); } stream.Write(data, 0, len); if ((frameH & 0xF) == 8) { buffer.EndBufferIndex(); return new ConnectionClose(); } if ((frameH & 0xF) == 9) { buffer.EndBufferIndex(); return new Ping(); } if((frameH & 0xF) == 10) { buffer.EndBufferIndex(); return new Pong(); } if((frameH & 0x80) == 128) break; } buffer.EndBufferIndex(); return stream.ToArray(); }
public void PacketBufferTest1() { PacketBuffer buffer = new PacketBuffer(); buffer.Dispose(); try { buffer.Write(1); } catch (Exception) { return; } throw new Exception("error"); }
public PacketBuffer Encode(IChannel channel, dynamic message) { var response = message as Response; if (response == null) return null; var builder = new StringBuilder(); builder.Append("HTTP/"); builder.Append(response.Protocol); builder.Append(" "); builder.Append(response.Status); builder.Append(" "); builder.AppendLine(StatusDictionary[response.Status]); builder.AppendFormat("Content-Type: {0}\r\n", response.ContentType); builder.Append(response.GetHeader()); MemoryStream content = null; if(response.GetContent() is StringBuilder) content = new MemoryStream(Encoding.UTF8.GetBytes(response.GetContent().ToString())); else content = (MemoryStream) response.GetContent(); content.Position = 0; builder.AppendFormat("Content-Length: {0}\r\n\r\n", content.Length); var buffer = new PacketBuffer(); buffer.WriteBytes(Encoding.UTF8.GetBytes(builder.ToString())); buffer.WriteStream(content); return buffer; }
private void LoadPostData(string contentType, PacketBuffer buffer, string name = null) { if (contentType == null) { string data = buffer.ReadString((int) buffer.AvailableBytes()); if(name != null) _postData.Add(name, data); } else if (contentType == "application/x-www-form-urlencoded") { string stringData = buffer.ReadString((int) buffer.AvailableBytes()); foreach (string q in stringData.Split('&')) { int valueStartPoint = q.IndexOf("=", System.StringComparison.Ordinal); if (valueStartPoint == -1 && q.Length > valueStartPoint + 1) continue; _postData.Add(q.Substring(0, valueStartPoint), q.Substring(valueStartPoint + 1)); } } else if (contentType.StartsWith("multipart/form-data;")) { byte[] p = System.Text.Encoding.UTF8.GetBytes(string.Format("\r\n--{0}", contentType.Substring(contentType.IndexOf("boundary=") + 9))); long len = 0; while ((len = buffer.FindBytes(p)) > -1) { var buf = new PacketBuffer(); buf.WriteBytes(buffer.ReadBytes((int)len)); buffer.ReadBytes(p.Length); buf.BeginBufferIndex(); buf.ReadLine(); var hDictionary = new Dictionary<string, string>(); string h = ""; while((h = buf.ReadLine()) != "") { if (h == null) break; int valueStartIndex = h.IndexOf(": ", System.StringComparison.Ordinal); if (valueStartIndex == -1) continue; string key = h.Substring(0, valueStartIndex).ToLower(); string value = h.Substring(valueStartIndex + 2, h.Length - valueStartIndex - 2); hDictionary.Add(key, value); } if (hDictionary.Count != 0) { string pname = hDictionary["content-disposition"].Substring( hDictionary["content-disposition"].IndexOf("name") + 6); pname = pname.Substring(0, pname.Length - 1); string type = null; try { type = hDictionary["content-type"]; } catch (Exception) { } LoadPostData(type, buf, pname); } buf.Dispose(); } } else if (name != null) { string tempName = Path.GetTempFileName(); var stream = new FileStream(tempName, FileMode.OpenOrCreate, FileAccess.Write); byte[] data = new byte[1024]; int len; while((len = buffer.Read(data, 0, 1024)) > 0) stream.Write(data, 0, len); stream.Close(); ((Dictionary<string, string>)_postData["FILES"]).Add(name, tempName); } }
private bool GetHeaders(PacketBuffer reader) { string h; while (true) { h = reader.ReadLine(); if (h == null) break; if (h == "") return true; SetHeader(h); } return false; }
public bool SetPostData(PacketBuffer buffer) { if (Convert.ToInt64(GetHeader("Content-Length")) > buffer.AvailableBytes() + 1) return false; var buf = buffer.GetStream() as MemoryStream; if(buf != null) _lowPostData = new MemoryStream(buf.GetBuffer(), (int)buf.Position, (int)(buf.Length - buf.Position)); LoadPostData(GetHeader("Content-Type"), buffer); return true; }
public object Decode(IChannel channel, PacketBuffer buffer) { var index = buffer.FindBytes(new byte[] {10, 13}); return index == -1 ? null : _encoding.GetString(buffer.ReadBytes((int)index)); }
public dynamic Decode(IChannel channel, PacketBuffer buffer) { return _step.Decode(channel, buffer); }