예제 #1
0
파일: Program.cs 프로젝트: weinre/nettunnel
        public async Task <bool> ProcessData(SocketConnection conn)
        {
            connection = conn;

            if (connection.CurrentFrame == null)
            {
                connection.CurrentFrame = FrameFactory.Create(connection.Buffer);

                if (connection.CurrentFrame == null)
                {
                    return(true);
                }
            }

            Frame f = connection.CurrentFrame;

            if (!f.Exam(connection.Buffer))
            {
                return(true);
            }

            f.Parse(connection.Buffer);
            await f.Process(connection);

            connection.CurrentFrame = null;

            return(true);
        }
예제 #2
0
        public async Task <bool> ProcessData(SocketConnection conn)
        {
            try
            {
                if (conn.CurrentFrame == null)
                {
                    conn.CurrentFrame = FrameFactory.Create(conn.Buffer);

                    if (conn.CurrentFrame == null)
                    {
                        return(true);
                    }
                }

                Frame f = conn.CurrentFrame;
                if (!f.Exam(conn.Buffer))
                {
                    return(true);
                }

                f.Parse(conn.Buffer);
                await f.Process(conn);

                conn.CurrentFrame = null;

                return(true);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return(false);
            }
        }
예제 #3
0
        public int Receive(byte[] frame)
        {
            var serialNumber = "SN-100-200";
            var data         = ConvertUtils.ConvertTextToByteArrayInHexadecimal(serialNumber);

            FrameFactory.Create(frame, MetersOperationsConstants.RESPONSE_SERIAL_NUMBER, data);
            return(data.Length + 4);
        }
예제 #4
0
        private static Person CreateTarget(out Context target)
        {
            var obj = new Person("Alice");

            obj.Occupation = "Student";
            target         = new Context(obj.ToString());
            target.AddFrame(FrameFactory.Create(obj));
            obj.Occupation = "Lawyer";
            target.AddFrame(FrameFactory.Create(obj));
            return(obj);
        }
예제 #5
0
        public void ContextTest_Evaluate_Not_True()
        {
            var obj    = new Person("Charlize");
            var target = new Context(obj.ToString());

            target.AddFrame(FrameFactory.Create(obj));
            var expr = new ExpressionNot(new KnowledgeRelation {
                Relation = "Name of", Subject = "T", Target = obj.ToString()
            });
            var actual = target.Evaluate(expr);

            Assert.AreEqual(EvaluationResult.True, actual);
        }
예제 #6
0
        public void ContextTest_Evaluate_Not_False()
        {
            var obj    = new Person("Charlize");
            var target = new Context(obj.ToString());

            target.AddFrame(FrameFactory.Create(obj));
            var expr = new ExpressionNot(new KnowledgeAttribute {
                Attribute = "Person", Subject = obj.ToString()
            });
            var actual = target.Evaluate(expr);

            Assert.AreEqual(EvaluationResult.False, actual);
        }
예제 #7
0
        public void ConnectWithFormatInvalidError()
        {
            //Arrange
            this.NetworkService = new MySocketTestConnectFormatError();

            //Act
            //Create frame request
            var frame = FrameFactory.Create(MetersOperationsConstants.REQUEST_CONNECT);

            this.NetworkService.Send(frame);

            //Create frame response
            var buffer       = new byte[100];
            var sizeReceived = this.NetworkService.Receive(buffer);

            //Validate response
            this.Validator.ValidateFrame(buffer, sizeReceived, MetersOperationsConstants.RESPONSE_CONNECT);
        }
예제 #8
0
        public void ContextTest_Evaluate_Xor_LeftFalse()
        {
            var obj    = new Person("Charlize");
            var target = new Context(obj.ToString());

            target.AddFrame(FrameFactory.Create(obj));
            var expr = new ExpressionXor(
                new KnowledgeRelation {
                Relation = "Name of", Subject = "Kate", Target = obj.ToString()
            },
                new KnowledgeAttribute {
                Attribute = "Person", Subject = obj.ToString()
            }
                );
            var actual = target.Evaluate(expr);

            Assert.AreEqual(EvaluationResult.True, actual);
        }
예제 #9
0
        //I try to generalize this method but i have not time for it
        protected byte[] TransferData(byte operation)
        {
            //Create frame request
            var frame = FrameFactory.Create(operation);

            this.NetworkService.Send(frame);

            //Create buffer to save received data
            var buffer       = new byte[BUFFER_DIMENSION];
            int sizeReceived = this.NetworkService.Receive(buffer);

            //Validate response
            try
            {
                this.Validator.ValidateFrame(buffer, sizeReceived, operation);
            }
            catch (OversizedException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
                return(null);
            }
            catch (InvalidFormatException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
                return(null);
            }
            catch (ErrorException)
            {
                this.NetworkService.Send(frame);
                return(null);
            }
            catch (ChecksumErrorException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
                return(null);
            }

            return(buffer);
        }
        public double ReadEnergyValue(DateTime dateTime)
        {
            //Convert DateTime in Hex (byte[])
            var dateTimeInHexadecimal = ConvertUtils.ConvertDateTimeToByteArrayInHexadecimal(dateTime);

            //Create frame request
            var frame = FrameFactory.Create(MetersOperationsConstants.REQUEST_READ_ENERGY_VALUE, dateTimeInHexadecimal);

            this.NetworkService.Send(frame);

            //Create buffer to save received data
            var buffer       = new byte[BUFFER_DIMENSION];
            var sizeReceived = this.NetworkService.Receive(buffer);

            //Validate response
            try
            {
                this.Validator.ValidateFrame(buffer, sizeReceived, MetersOperationsConstants.RESPONSE_READ_ENERGY_VALUE);
            }
            catch (OversizedException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
            catch (InvalidFormatException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
            catch (ErrorException)
            {
                this.NetworkService.Send(frame);
            }
            catch (ChecksumErrorException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }

            return(ConvertUtils.ConvertByteArrayInHexadecimalToDouble(buffer));
        }
예제 #11
0
        public void ContextTest_Evaluate_Xor_BothFalse()
        {
            var obj = new Person("Charlize")
            {
                Gender = Person.GenderType.Female
            };
            var target = new Context(obj.ToString());

            target.AddFrame(FrameFactory.Create(obj));
            var expr = new ExpressionXor(
                new KnowledgeRelation {
                Relation = "Name of", Subject = "T", Target = obj.ToString()
            },
                new KnowledgeRelation {
                Relation = "Gender of", Subject = "female", Target = obj.ToString()
            }
                );
            var actual = target.Evaluate(expr);

            Assert.AreEqual(EvaluationResult.False, actual);
        }
        public void Disconnect()
        {
            //Create frame request
            var frame = FrameFactory.Create(MetersOperationsConstants.REQUEST_DISCONNECT);

            this.NetworkService.Send(frame);

            //Create buffer to save received data
            var buffer       = new byte[BUFFER_DIMENSION];
            var sizeReceived = this.NetworkService.Receive(buffer);

            //Validate response
            try
            {
                this.Validator.ValidateFrame(buffer, sizeReceived, MetersOperationsConstants.RESPONSE_DISCONNECT);
            }
            catch (OversizedException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
            catch (InvalidFormatException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
            catch (ErrorException)
            {
                this.NetworkService.Send(frame);
            }
            catch (ChecksumErrorException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }

            //Switch off socket connection
            this.NetworkService.Disconnect();
        }
        public void Connect()
        {
            //Create socket connection to exchange data between client and server
            this.NetworkService.Connect(this.Ip, this.Port);

            //Create frame request
            var frame = FrameFactory.Create(MetersOperationsConstants.REQUEST_CONNECT);

            this.NetworkService.Send(frame);

            //Create frame response
            var buffer       = new byte[BUFFER_DIMENSION];
            var sizeReceived = this.NetworkService.Receive(buffer);

            //Validate response
            try
            {
                this.Validator.ValidateFrame(buffer, sizeReceived, MetersOperationsConstants.RESPONSE_CONNECT);
            }
            catch (OversizedException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
            catch (InvalidFormatException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
            catch (ErrorException)
            {
                this.NetworkService.Send(frame);
            }
            catch (ChecksumErrorException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
        }
        public string ReadSerialNumber()
        {
            //Create frame request
            var frame = FrameFactory.Create(MetersOperationsConstants.REQUEST_SERIAL_NUMBER);

            this.NetworkService.Send(frame);

            //Create buffer to save received data
            var buffer       = new byte[BUFFER_DIMENSION];
            var sizeReceived = this.NetworkService.Receive(buffer);
            var dataSize     = ConvertUtils.ConvertByteInHexadecimalToInt(buffer[2]);

            //Validate response
            try
            {
                this.Validator.ValidateFrame(buffer, sizeReceived, MetersOperationsConstants.RESPONSE_SERIAL_NUMBER);
            }
            catch (OversizedException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
            catch (InvalidFormatException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
            catch (ErrorException)
            {
                this.NetworkService.Send(frame);
            }
            catch (ChecksumErrorException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }

            return(ConvertUtils.ConvertByteArrayInHexadecimalToText(buffer, dataSize));
        }
        public DateTime ReadDateTime()
        {
            //Create frame request
            var frame = FrameFactory.Create(MetersOperationsConstants.REQUEST_DATE_AND_TIME);

            this.NetworkService.Send(frame);

            //Create buffer to save received data
            var buffer       = new byte[BUFFER_DIMENSION];
            var sizeReceived = this.NetworkService.Receive(buffer);

            //Validate response
            try
            {
                this.Validator.ValidateFrame(buffer, sizeReceived, MetersOperationsConstants.RESPONSE_DATE_AND_TIME);
            }
            catch (OversizedException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
            catch (InvalidFormatException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }
            catch (ErrorException)
            {
                this.NetworkService.Send(frame);
            }
            catch (ChecksumErrorException)
            {
                frame = FrameFactory.Create(MetersOperationsConstants.ERROR);
                this.NetworkService.Send(frame);
            }

            return(ConvertUtils.ConvertByteArrayInHexadecimalToDateTime(buffer));
        }
예제 #16
0
        public void GetSerialNumberWithSuccess()
        {
            //Arrange
            this.NetworkService = new MySocketTestGetSerialNumber();

            //Act
            //Create frame request
            var frame = FrameFactory.Create(MetersOperationsConstants.REQUEST_SERIAL_NUMBER);

            this.NetworkService.Send(frame);

            //Create frame response
            var buffer       = new byte[100];
            var sizeReceived = this.NetworkService.Receive(buffer);

            //Validate response
            this.Validator.ValidateFrame(buffer, sizeReceived, MetersOperationsConstants.RESPONSE_SERIAL_NUMBER);

            var serialNumber = ConvertUtils.ConvertByteArrayInHexadecimalToText(buffer, sizeReceived);

            //Assert
            Assert.AreEqual("SN-100-200", serialNumber);
        }
 public int Receive(byte[] frame)
 {
     FrameFactory.Create(frame, MetersOperationsConstants.RESPONSE_DISCONNECT, 0x00, 0x00);
     return(5);
 }
예제 #18
0
        public void Create_A_Strike_When_All_Pins_Down_After_One_Roll()
        {
            Frame frame = FrameFactory.Create("X");

            Check.That(frame).IsInstanceOf <Strike>();
        }
 public int Receive(byte[] frame)
 {
     FrameFactory.Create(frame, MetersOperationsConstants.ERROR, 0x00, 0x00);
     return(5);
 }
예제 #20
0
        public void Create_a_Spare_When_All_Pins_Fallen_After_Two_Rolls()
        {
            Frame frame = FrameFactory.Create("2/");

            Check.That(frame).IsInstanceOf <Spare>();
        }
예제 #21
0
        public void Create_a_Basic_Frame_When_Not_All_Pins_Are_Fallen()
        {
            Frame frame = FrameFactory.Create("26");

            Check.That(frame).IsInstanceOf <BasicFrame>();
        }