public override void OnReceiveData(byte[] _buffer) { try { List <byte> mBuffer = new List <byte>(); for (int I = 0; I < _buffer.Length; I++) { mBuffer.Add((byte)(_buffer[I] ^ Core.BuildConfig.GameKey_Client)); } InPacket _packet = new InPacket(); _packet.Set(mBuffer.ToArray()); Networking.PacketHandler _handler = Globals.GetInstance().ServerInstance.GetPacket(_packet.GetOPC()); if (_handler != null && _handler is Networking.PacketHandler) { _handler.Set(this, mBuffer.ToArray()); if (_handler != null) { _handler.Handle(); } } else { Core.Log.WriteError("Received unhandled packet! [" + _packet.GetOPC() + "]"); } } catch { } }
private void OnDataReceived(IAsyncResult iAr) { try { int bytesReceived = socket.EndReceive(iAr); if (bytesReceived > 0) { byte[] packetBuffer = new byte[bytesReceived]; Buffer.BlockCopy(buffer, 0, packetBuffer, 0, bytesReceived); // Decrypt the bytes with the xOrKey. for (int i = 0; i < bytesReceived; i++) { packetBuffer[i] ^= Core.Constants.xOrKeySend; } int oldLength = cacheBuffer.Length; Array.Resize(ref cacheBuffer, oldLength + bytesReceived); Buffer.BlockCopy(packetBuffer, 0, cacheBuffer, oldLength, packetBuffer.Length); int startIndex = 0; // Determs whre the bytes should split for (int i = 0; i < cacheBuffer.Length; i++) { // loop trough our cached buffer. if (cacheBuffer[i] == 0x0A) { // Found a complete packet byte[] newPacket = new byte[i - startIndex]; // determ the new packet size. for (int j = 0; j < (i - startIndex); j++) { newPacket[j] = cacheBuffer[startIndex + j]; // copy the buffer to the buffer of the new packet. } packetCount++; // Handle the packet instantly. InPacket inPacket = new InPacket(newPacket); if (inPacket.Id > 0) { PacketHandler <ServerClient> pHandler = NetworkTable.Instance.FindInternal(inPacket); if (pHandler != null) { //try { pHandler.Handle(this, inPacket); //} catch { /*Disconnect();*/ } } } startIndex = i + 1; } } if (startIndex > 0) { byte[] fullCopy = cacheBuffer; Array.Resize(ref cacheBuffer, (cacheBuffer.Length - startIndex)); for (int i = 0; i < (cacheBuffer.Length - startIndex); i++) { cacheBuffer[i] = fullCopy[startIndex + i]; } fullCopy = null; } socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(OnDataReceived), null); } else { Disconnect(); } } catch { Disconnect(); } }