Exemplo n.º 1
0
        private void Receive_Sync(XConnection connection, G2ReceivedPacket packet)
        {
            // received by client from server

            var sync = SyncPacket.Decode(packet.Root);

            //Log("Sync packet received");

            connection.SyncCount++;
            connection.LastSyncSize = packet.Root.PacketSize;

            XRay.RemoteSync(sync);
        }
Exemplo n.º 2
0
        internal void IncomingPacket(XConnection connection, G2ReceivedPacket packet)
        {
            if (XRay.IsInvokeRequired())
            {
                XRay.RunInCoreAsync(() => IncomingPacket(connection, packet));
                return;
            }

            switch (packet.Root.Name)
            {
            case PacketType.Padding:
                //Log("Crypt Padding Received");
                break;

            case PacketType.Generic:

                var generic = GenericPacket.Decode(packet.Root);

                Log("Generic Packet Received: " + generic.Name);

                if (RouteGeneric.ContainsKey(generic.Name))
                {
                    RouteGeneric[generic.Name](connection, generic);
                }
                else
                {
                    Log("Unknown generic packet: " + generic.Name);
                }

                break;

            case PacketType.Dat:
                Receive_DatPacket(connection, packet);
                break;

            case PacketType.Sync:
                Receive_Sync(connection, packet);
                break;

            case PacketType.Instance:
                Receive_Instance(connection, packet);
                break;

            default:
                Log("Unknown Packet Type: " + packet.Root.Name.ToString());
                break;
            }
        }
Exemplo n.º 3
0
        void Receive_DatPacket(XConnection connection, G2ReceivedPacket packet)
        {
            // received by client from server
            var chunk = DatPacket.Decode(packet.Root);

            // write to tmp file
            if (LocalTempFile == null)
            {
                LocalTempFile = File.Create(LocalDatTempPath);
                LocalTempFile.SetLength(0);
            }

            Log("Received dat pos: {0}, length: {1}", chunk.Pos, chunk.Data.Length); //todo delete

            LocalTempFile.Write(chunk.Data);

            var percentComplete = LocalTempFile.Length * 100 / RemoteDatSize;

            RemoteStatus = string.Format("Downloading Dat File - {0}% Complete", percentComplete);

            // hash when complete
            if (LocalTempFile.Length >= RemoteDatSize)
            {
                LocalTempFile.Close();
                LocalTempFile = null;

                var checkHash = Utilities.MD5HashFile(LocalDatTempPath);

                if (checkHash == RemoteDatHash)
                {
                    File.Move(LocalDatTempPath, LocalDatPath);
                    Send_StartSync(connection);
                }
                else
                {
                    RemoteStatus = string.Format("Dat integrity check failed - Expecting {0}, got {1}", RemoteDatHash, checkHash);
                }
            }
        }
Exemplo n.º 4
0
        void ReceivePackets()
        {
            int          Start        = 0;
            G2ReadResult streamStatus = G2ReadResult.PACKET_GOOD;

            while (streamStatus == G2ReadResult.PACKET_GOOD)
            {
                G2ReceivedPacket packet = new G2ReceivedPacket();
                packet.Root = new G2Header(FinalRecvBuffer);

                streamStatus = G2Protocol.ReadNextPacket(packet.Root, ref Start, ref FinalRecvBuffSize);

                if (streamStatus != G2ReadResult.PACKET_GOOD)
                {
                    break;
                }

                packet.Tcp = this;

                // extract data from final recv buffer so it can be referenced without being overwritten by this thread
                byte[] extracted = Utilities.ExtractBytes(packet.Root.Data, packet.Root.PacketPos, packet.Root.PacketSize);
                packet.Root = new G2Header(extracted);
                G2Protocol.ReadPacket(packet.Root);

                PacketLogEntry logEntry = new PacketLogEntry(DateTime.Now, DirectionType.In, ToString(), packet.Root.Data);
                LogPacket(logEntry);

                Remote.IncomingPacket(this, packet);
            }

            // re-align buffer
            if (Start > 0 && FinalRecvBuffSize > 0)
            {
                Buffer.BlockCopy(FinalRecvBuffer, Start, FinalRecvBuffer, 0, FinalRecvBuffSize);
                //Network.UpdateConsole(PacketBytesReady.ToString() + " bytes moved to front of receive buffer");
            }
        }
Exemplo n.º 5
0
 public static CryptPadding Decode(G2ReceivedPacket packet)
 {
     CryptPadding padding = new CryptPadding();
     return padding;
 }
Exemplo n.º 6
0
        public static CryptPadding Decode(G2ReceivedPacket packet)
        {
            CryptPadding padding = new CryptPadding();

            return(padding);
        }
Exemplo n.º 7
0
        private void Receive_Instance(XConnection connection, G2ReceivedPacket rawPacket)
        {
            // received by client from server

            var packet = InstancePacket.Decode(rawPacket.Root);

            XUI ui;

            if (!XRay.UIs.TryGetValue(packet.ThreadID, out ui))
            {
                Log("Receive Instance: UI not found for instance result");
                return;
            }

            if (ui.CurrentInstance == null)
            {
                Log("Receive Instance: Field not set");
                return;
            }

            bool        updateTree   = false;
            bool        updateFields = false;
            IFieldModel expandField  = null;

            var instance = ui.CurrentInstance;

            if (packet.Details != null)
            {
                instance.DetailsLabel = packet.Details;
            }

            if (packet.Columns != null)
            {
                instance.Columns = packet.Columns;
                updateTree       = true;
            }

            if (packet.Type == InstancePacketType.Root)
            {
                instance.RootNodes = packet.Fields;
                updateTree         = true;
                updateFields       = true;
            }
            else if (packet.Type == InstancePacketType.Field)
            {
                IFieldModel field;
                if (instance.FieldMap.TryGetValue(packet.FieldID, out field))
                {
                    field.Nodes = packet.Fields;
                }

                updateFields = true;
                expandField  = field;
            }
            else if (packet.Type == InstancePacketType.Refresh)
            {
                foreach (var field in packet.Fields)
                {
                    if (instance.FieldMap.ContainsKey(field.ID))
                    {
                        instance.FieldMap[field.ID].Cells = field.Cells;
                    }
                }

                updateTree = true; // cause recursive update of cells
                // dont update fields because already added, and would orphen fields associated with nodes
            }

            if (updateFields)
            {
                foreach (var field in packet.Fields)
                {
                    instance.FieldMap[field.ID] = field;
                }
            }

            // if we're geting fresh info, or refresh info with new columns
            if (updateTree && instance.UpdatedTree != null)
            {
                ui.Window.BeginInvoke(new Action(() => instance.UpdatedTree()));
            }

            if (expandField != null && instance.ExpandedField != null)
            {
                ui.Window.BeginInvoke(new Action(() => instance.ExpandedField(expandField)));
            }
        }
Exemplo n.º 8
0
        private void Receive_Sync(XConnection connection, G2ReceivedPacket packet)
        {
            // received by client from server

            var sync = SyncPacket.Decode(packet.Root);

            //Log("Sync packet received");

            connection.SyncCount++;
            connection.LastSyncSize = packet.Root.PacketSize;

            XRay.RemoteSync(sync);
        }
Exemplo n.º 9
0
        private void Receive_Instance(XConnection connection, G2ReceivedPacket rawPacket)
        {
            // received by client from server

            var packet = InstancePacket.Decode(rawPacket.Root);

            XUI ui;
            if (!XRay.UIs.TryGetValue(packet.ThreadID, out ui))
            {
                Log("Receive Instance: UI not found for instance result");
                return;
            }

            if (ui.CurrentInstance == null)
            {
                Log("Receive Instance: Field not set");
                return;
            }

            bool updateTree = false;
            bool updateFields = false;
            IFieldModel expandField = null;

            var instance = ui.CurrentInstance;

            if (packet.Details != null)
                instance.DetailsLabel = packet.Details;

            if (packet.Columns != null)
            {
                instance.Columns = packet.Columns;
                updateTree = true;
            }

            if (packet.Type == InstancePacketType.Root)
            {
                instance.RootNodes = packet.Fields;
                updateTree = true;
                updateFields = true;
            }
            else if(packet.Type == InstancePacketType.Field)
            {
                IFieldModel field;
                if (instance.FieldMap.TryGetValue(packet.FieldID, out field))
                    field.Nodes = packet.Fields;

                updateFields = true;
                expandField = field;
            }
            else if (packet.Type == InstancePacketType.Refresh)
            {
                foreach (var field in packet.Fields)
                    if (instance.FieldMap.ContainsKey(field.ID))
                        instance.FieldMap[field.ID].Cells = field.Cells;

                updateTree = true; // cause recursive update of cells
                // dont update fields because already added, and would orphen fields associated with nodes
            }

            if (updateFields)
                foreach (var field in packet.Fields)
                    instance.FieldMap[field.ID] = field;

            // if we're geting fresh info, or refresh info with new columns
            if (updateTree && instance.UpdatedTree != null)
                ui.Window.BeginInvoke(new Action(() => instance.UpdatedTree()));

            if (expandField != null && instance.ExpandedField != null)
                ui.Window.BeginInvoke(new Action(() => instance.ExpandedField(expandField)));
        }
Exemplo n.º 10
0
        void Receive_DatPacket(XConnection connection, G2ReceivedPacket packet)
        {
            // received by client from server
            var chunk = DatPacket.Decode(packet.Root);

            // write to tmp file
            if (LocalTempFile == null)
            {
                LocalTempFile = File.Create(LocalDatTempPath);
                LocalTempFile.SetLength(0);
            }

            Log("Received dat pos: {0}, length: {1}", chunk.Pos, chunk.Data.Length); //todo delete

            LocalTempFile.Write(chunk.Data);

            var percentComplete = LocalTempFile.Length * 100 / RemoteDatSize;

            RemoteStatus = string.Format("Downloading Dat File - {0}% Complete", percentComplete);

            // hash when complete
            if (LocalTempFile.Length >= RemoteDatSize)
            {
                LocalTempFile.Close();
                LocalTempFile = null;

                var checkHash = Utilities.MD5HashFile(LocalDatTempPath);

                if (checkHash == RemoteDatHash)
                {
                    File.Move(LocalDatTempPath, LocalDatPath);
                    Send_StartSync(connection);
                }
                else
                    RemoteStatus = string.Format("Dat integrity check failed - Expecting {0}, got {1}", RemoteDatHash, checkHash);
            }
        }
Exemplo n.º 11
0
        internal void IncomingPacket(XConnection connection, G2ReceivedPacket packet)
        {
            if (XRay.IsInvokeRequired())
            {
                XRay.RunInCoreAsync(() => IncomingPacket(connection, packet));
                return;
            }

            switch (packet.Root.Name)
            {
                case PacketType.Padding:
                    //Log("Crypt Padding Received");
                    break;

                case PacketType.Generic:

                    var generic = GenericPacket.Decode(packet.Root);

                    Log("Generic Packet Received: " + generic.Name);

                    if(RouteGeneric.ContainsKey(generic.Name))
                        RouteGeneric[generic.Name](connection, generic);
                    else
                       Log("Unknown generic packet: " + generic.Name);

                    break;

                case PacketType.Dat:
                    Receive_DatPacket(connection, packet);
                    break;

                case PacketType.Sync:
                    Receive_Sync(connection, packet);
                    break;

                case PacketType.Instance:
                    Receive_Instance(connection, packet);
                    break;

                default:
                    Log("Unknown Packet Type: " + packet.Root.Name.ToString());
                    break;
            }
        }
Exemplo n.º 12
0
        void ReceivePackets()
        {
            int Start = 0;
            G2ReadResult streamStatus = G2ReadResult.PACKET_GOOD;

            while (streamStatus == G2ReadResult.PACKET_GOOD)
            {
                G2ReceivedPacket packet = new G2ReceivedPacket();
                packet.Root = new G2Header(FinalRecvBuffer);

                streamStatus = G2Protocol.ReadNextPacket(packet.Root, ref Start, ref FinalRecvBuffSize);

                if (streamStatus != G2ReadResult.PACKET_GOOD)
                    break;

                packet.Tcp = this;

                // extract data from final recv buffer so it can be referenced without being overwritten by this thread
                byte[] extracted = Utilities.ExtractBytes(packet.Root.Data, packet.Root.PacketPos, packet.Root.PacketSize);
                packet.Root = new G2Header(extracted);
                G2Protocol.ReadPacket(packet.Root);

                PacketLogEntry logEntry = new PacketLogEntry(DateTime.Now, DirectionType.In, ToString(), packet.Root.Data);
                LogPacket(logEntry);

                Remote.IncomingPacket(this, packet);
            }

            // re-align buffer
            if (Start > 0 && FinalRecvBuffSize > 0)
            {
                Buffer.BlockCopy(FinalRecvBuffer, Start, FinalRecvBuffer, 0, FinalRecvBuffSize);
                //Network.UpdateConsole(PacketBytesReady.ToString() + " bytes moved to front of receive buffer");
            }
        }