/// <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); } } }
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; }
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); }
private static NetWriterConfiguration CreateLoggerConfigurationInstance(INetworkWriter config) { return(new NetWriterConfiguration(ConvertLogLevel(config.LogLevel), config.ServerAddress, config.Port)); }
public void Write(INetworkWriter networkWriter) { Write(networkWriter.Write(this)); }
public void Add(INetworkWriter writer) { Writers.Add(writer); }
public void Write(INetworkWriter networkWriter, NetworkConnection connection) { Write(networkWriter.Write(this), connection); }