/// <summary>
        /// Конструктор формы для отправки нового вопроса в базу данных
        /// </summary>
        /// <param name="ipAddressString"> ip-адрес сервера </param>
        public AddQuestionForm(string ipAddressString)
        {
            _server = NetworkingFactory.UdpWriter <ServiceMessage>(IPAddress.Parse(ipAddressString), 8080);

            InitializeComponent();

            VarComboBox.Items.AddRange(new string[] { "1", "2" });
        }
        // Maybe this should be an acknowledgment system instead of just a ping
        private void SuccessfullyWrite(INetworkWriter writer, NetworkConnection connection)
        {
            var networkPing = new NetworkPing {
                SentTime = Time.time
            };

            if (!_pingMap.ContainsKey(connection.InternalId))
            {
                _pingMap.Add(connection.InternalId, new List <NetworkPing>());
            }

            _pingMap[connection.InternalId].Add(networkPing);
        }
 internal ReceivedRpcCall(
     int program,
     int[] versions,
     INetworkReader networkReader,
     INetworkWriter networkWriter,
     Action <ReceivedRpcCall> receivedCallDispatcher)
 {
     this.program = program;
     this.receivedCallDispatcher = receivedCallDispatcher;
     this.lowVersion             = (uint)versions.Min();
     this.highVersion            = (uint)versions.Max();
     this.xdrReader = new XdrReader(networkReader);
     this.xdrWriter = new XdrWriter(networkWriter);
 }
 // функция пересылает картинку с сервера всем клиентам
 private void Send_picture()
 {
     foreach (var client in _clientList)
     {
         try
         {
             Monitor.Enter(panel1);
             Monitor.Enter(pic);
             _client_pictures = NetworkingFactory.UdpWriter <Pictures>(client, Ports.PictPort);
             var msg = new Pictures(pic);
             _client_pictures.Write(msg);
         }
         finally
         {
             Monitor.Exit(panel1);
             Monitor.Exit(pic);
         }
     }
 }
        private static void OnServiceMessage(object sender, IncommingMessageEventArgs <Lines> e)
        {
            // если такого клиента, который прислал линию, ещё нет в списке, добавить его в список
            if (!_clientList.Contains(e.Sender.Address))
            {
                _clientList.Add(e.Sender.Address);
            }
            // для каждого клиента в списке подключенных (потом вместо списка можно использовать БД)
            foreach (var client in _clientList)
            {
                //_client.Dispose();
                _client = NetworkingFactory.UdpWriter <Lines>(client, 9090);
                var msg = new Lines(e.Message.PrPoint(), e.Message.CurtPoint(), e.Message.pen());
                // для графического объекта вызываем стандартную функцию рисования линии с аргументами, полученными от клиента
                g.DrawLine(e.Message.pen(), e.Message.CurtPoint(), e.Message.PrPoint());

                _client.Write(msg);
                _client.Dispose();
            }
        }
        // обработчик события "появилась линия"
        private void OnLinesMessage(object sender, IncommingMessageEventArgs <Lines> e)
        {
            // если такого клиента, который прислал линию, ещё нет в списке, добавить его в список
            if (!_clientList.Contains(e.Sender.Address))
            {
                _clientList.Add(e.Sender.Address);
            }
            // для каждого клиента в списке подключенных (потом вместо списка можно использовать БД)
            foreach (var client in _clientList)
            {
                _client_line = NetworkingFactory.UdpWriter <Lines>(client, Ports.LineServerPort);
                var msg = new Lines(e.Message.PrPoint(), e.Message.CurtPoint(), e.Message.pen());

                // передать информацию о линии всем клиентам
                _client_line.Write(msg);
                _client_line.Dispose();
            }

            try
            {
                Monitor.Enter(panel1);
                Graphics G = Graphics.FromImage(pic);
                foreach (var line in linesList)
                {
                    G.DrawLine(line.pen(), line.CurtPoint(), line.PrPoint());
                }
                linesList = new List <Lines>();

                G.DrawLine(e.Message.pen(), e.Message.CurtPoint(), e.Message.PrPoint());
                G.Dispose();
            }
            catch
            {
                linesList.Add(e.Message);
            }
            finally
            {
                Monitor.Exit(panel1);
            }
        }
        // обработчик события "очистка экрана"
        private void OnServiceMessage(object sender, IncommingMessageEventArgs <ServiceMessage> e)
        {
            // если такого клиента, который прислал линию, ещё нет в списке, добавить его в список
            if (!_clientList.Contains(e.Sender.Address))
            {
                _clientList.Add(e.Sender.Address);
            }

            if (e.Message.Command == Command.CleanScreen)
            {
                //для каждого клиента в списке подключенных
                foreach (var client in _clientList)
                {
                    _client = NetworkingFactory.UdpWriter <ServiceMessage>(client, Ports.SMServerPort);
                    var msg = new ServiceMessage(Command.CleanScreen);
                    linesList = new List <Lines>();
                    clear();

                    _client.Write(msg);
                    _client.Dispose();
                }
            }
            else if (e.Message.Command == Command.GetPic)
            {
                try
                {
                    Monitor.Enter(panel1);
                    Monitor.Enter(pic);
                    _client_pictures = NetworkingFactory.UdpWriter <Pictures>(e.Sender.Address, Ports.PictPort);
                    var msg = new Pictures(pic);
                    _client_pictures.Write(msg);
                }
                finally
                {
                    Monitor.Exit(panel1);
                    Monitor.Exit(pic);
                }
            }
        }
Beispiel #8
0
 public RpcCall(
     int program,
     IPEndPoint remoteIpEndPoint,
     INetworkReader networkReader,
     INetworkWriter networkWriter,
     Action reestablishConnection,
     ILogger logger = default)
 {
     this.remoteIpEndPoint = remoteIpEndPoint;
     this.networkReader    = networkReader;
     this.networkWriter    = networkWriter;
     this.xdrReader        = new XdrReader(networkReader);
     this.xdrWriter        = new XdrWriter(networkWriter);
     this.rpcMessage       = new RpcMessage
     {
         Body = new Body
         {
             MessageType = MessageType.Call,
             CallBody    = new CallBody
             {
                 RpcVersion = 2,
                 Program    = (uint)program,
                 Credential = new OpaqueAuthentication
                 {
                     AuthenticationFlavor = AuthenticationFlavor.None, Body = new byte[0]
                 },
                 Verifier = new OpaqueAuthentication
                 {
                     AuthenticationFlavor = AuthenticationFlavor.None, Body = new byte[0]
                 }
             }
         }
     };
     this.logger = logger;
     this.reestablishConnection = reestablishConnection;
 }
Beispiel #9
0
 public XdrWriter(INetworkWriter networkWriter)
 {
     this.networkWriter = networkWriter;
 }
        /// <summary>
        /// Конструктор формы для прождения теста
        /// </summary>
        /// <param name="ipAddressString"> ip-адрес сервера </param>
        public QuestionForm(string ipAddressString)
        {
            _listener = new UdpMessageListener <Question>(9090);
            _listener.IncomingMessage += OnIncomingQuestion;
            _listener.Start();
            _server = NetworkingFactory.UdpWriter <ServiceMessage>(IPAddress.Parse(ipAddressString), 8080);

            InitializeComponent();

            //Отправляем на сервер запрос о количестве вопросов в базе данных
            ServiceMessage msg = new ServiceMessage(Command.CountQuestions);

            _server.Write(msg);

            bool flag = false;

            //Пытаемся получить ответ на запрос от сервера
            try
            {
                var reader  = NetworkingFactory.UdpReader <Question>(9091);
                var Message = reader.Read(15000);
                var Sender  = reader.Sender;

                int.TryParse(Message.Text, out maxQuestionNumber);
                flag = true;
                reader.Dispose();
            }
            catch (Exception e)
            {
                //MessageBoxButtons buttons = MessageBoxButtons.OK;
                //MessageBox.Show(e.Message, "Error Detected in Input", buttons);
            }

            //Если ответ от сервера не получен, показываем соответствующее сообщение для пользователя
            string caption = "Info";
            var    message = "";

            if (!flag)
            {
                message = "Сервер не отвечает.";
            }
            else if (maxQuestionNumber == 0)
            {
                message = "В базе нет ни одного вопроса.";
            }

            if (message != "")
            {
                MessageBoxButtons buttons = MessageBoxButtons.OK;
                MessageBox.Show(message, caption, buttons);
            }

            CountLabel.Text = "В базе " + maxQuestionNumber + " вопросов.";

            //Генерируем случайную последовательность вопросов
            perm = Enumerable.Range(1, maxQuestionNumber).ToArray();
            Random r = rnd;

            for (int i = maxQuestionNumber - 1; i >= 1; i--)
            {
                int j = r.Next(i + 1);

                int temp = perm[j];
                perm[j] = perm[i];
                perm[i] = temp;
            }

            //Отправляем на сервер запрос первого вопроса теста
            msg = new ServiceMessage(Command.NextQuestion, perm[NumQuestion]);
            _server.Write(msg);
        }
Beispiel #11
0
 private static NetWriterConfiguration CreateLoggerConfigurationInstance(INetworkWriter config)
 {
     return(new NetWriterConfiguration(ConvertLogLevel(config.LogLevel), config.ServerAddress, config.Port));
 }
Beispiel #12
0
 public void Write(INetworkWriter networkWriter)
 {
     Write(networkWriter.Write(this));
 }
Beispiel #13
0
 public void Add(INetworkWriter writer)
 {
     Writers.Add(writer);
 }
 public void Write(INetworkWriter networkWriter, NetworkConnection connection)
 {
     Write(networkWriter.Write(this), connection);
 }