Ejemplo n.º 1
0
        public void Start()
        {
            calcIO.WriteLine(
                "Usage:\n" +
                "  when first symbol on line is ‘>’ – enter operand(number)\n" +
                "  when first symbol on line is ‘@’ – enter operation\n");

            RunMathOperation(mathOperations['=']);

            bool running = true;

            while (running)
            {
                string input;

                do
                {
                    calcIO.Write("@: ");
                    input = calcIO.ReadString().Trim();
                } while (input.Length > 1 || string.IsNullOrWhiteSpace(input));

                if (mathOperations.TryGetValue(input[0], out var mathFunc))
                {
                    RunMathOperation(mathFunc);
                    continue;
                }

                if (systemOperations.TryGetValue(input[0], out var sysFunc))
                {
                    running = sysFunc();
                }
            }
        }
Ejemplo n.º 2
0
        public ClientProcessor(MathsProccessor.MathsProccessorClient client, ICalcIO calcIO, ICalcInputParser parser)
        {
            this.client = client;
            this.calcIO = calcIO;
            this.parser = parser;

            operationsCount = 0;
            clientID        = Guid.NewGuid().ToString();

            mathOperations = new Dictionary <char, Func <Arguments, Result> >
            {
                ['='] = (args) => client.Set(args),
                ['+'] = (args) => client.Add(args),
                ['-'] = (args) => client.Sub(args),
                ['*'] = (args) => client.Mul(args),
                ['/'] = (args) => client.Div(args),
            };

            systemOperations = new Dictionary <char, Func <bool> >
            {
                ['q'] = () => false,
                ['#'] = () =>
                {
                    var input  = parser.ReadInt(x => x > 0 && x <= operationsCount);
                    var result = client.Jmp(new Arguments()
                    {
                        ID = clientID, Input = input
                    }).Value;

                    calcIO.WriteLine($"[#{++operationsCount}] = {result}");
                    return(true);
                },
            };
        }
Ejemplo n.º 3
0
        public bool Run(IProcessorStorage storage)
        {
            ICalcIO     calcIO     = storage.CalcIO;
            IMathBuffer mathBuffer = storage.Maths;

            double input = storage.InputParser.ReadDouble();

            while (input == 0)
            {
                calcIO.WriteLine(new DivideByZeroException().Message);
                input = (calcIO as ICalcInputParser).ReadDouble();
            }

            mathBuffer.TempValue = input;
            mathBuffer.AccValue /= input;
            mathBuffer.SaveAccValue();

            return(true);
        }
Ejemplo n.º 4
0
        private static void Main(string[] args)
        {
            _programRunning = true;
            _clientCalcIO   = new ConsoleCalcIO();

            var ipPoint = new IPEndPoint(IPAddress.Parse(args[0]), int.Parse(args[1]));
            var socket  = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                socket.Connect(ipPoint);
            }
            catch (Exception e)
            {
                _clientCalcIO.WriteLine($"Can't connect to server {ipPoint}\nError: {e.Message}");
                _clientCalcIO.ReadString();

                return;
            }

            _networkCalcIO = new TCPCalcIO(socket, _clientCalcIO);

            _readMessagesThread = new Thread(new ThreadStart(ReadServerMessages));
            _readMessagesThread.Start();

            while (_programRunning)
            {
                string input = _clientCalcIO.ReadString().ToLower();

                if (input == "q")
                {
                    _programRunning = false;
                    _networkCalcIO.Disconnect();
                    return;
                }

                if (_programRunning)
                {
                    _networkCalcIO.Write(input);
                }
            }
        }
Ejemplo n.º 5
0
        private static void Main(string[] args)
        {
            _programRunning = true;
            _consoleCalcIO  = new ConsoleCalcIO();
            _clientCalcIO   = new List <TCPCalcIO>();
            _clientThreads  = new List <Thread>();

            var ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse(args[0]));

            _listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            _consoleCalcIO.WriteLine("Server started at port " + args[0]);

            _listenSocket.Bind(ipPoint);
            _listenSocket.Listen(10);

            _connectThread = new Thread(new ThreadStart(ConnectionsThread));
            _connectThread.Start();

            while (_programRunning)
            {
                _consoleCalcIO.ReadString();
            }
        }