private void ShowForm(object message) { using(MessageForm MessageForm = new MessageForm(message as NSAServer.Message)) Application.Run(MessageForm); }
/// <summary> /// Вызывается при приеме сообщения на сокет (?) /// </summary> /// <param name="state"></param> private void DataReadCallback(IAsyncResult state) { ConnectionInfo connection = (ConnectionInfo) state.AsyncState; if (connection.inputString == null) connection.inputString = new StringBuilder(); try { int bytesRead = connection.Socket.EndReceive(state); if (bytesRead > 0) { connection.inputString.Append(Encoding.UTF8.GetString(connection.Buffer)); connection.Buffer = new byte[ConnectionInfo.BufferSize]; string content = connection.inputString.ToString().Trim(); if (content.IndexOf("<EOF>") > -1) { string content_strip = content.Remove(content.IndexOf("<EOF>")); byte[] bytes = Convert.FromBase64String(content_strip); MemoryStream deserializationStream = new MemoryStream(bytes); deserializationStream.Position = 0; BinaryFormatter binaryFormatter = new BinaryFormatter(); NSAServer.Message message = (NSAServer.Message)binaryFormatter.Deserialize(deserializationStream); byte[] answer = Encoding.UTF8.GetBytes("принято"); MessageForm frm = new MessageForm(message); Thread MessageShowThread = new Thread(new ParameterizedThreadStart(ShowForm)); MessageShowThread.Start(message); MessageBox.Show(String.Format("Текст : {0}. Уровень : {1}",message.Text, message.Level)); connection.Socket.BeginSend(answer, 0, answer.Length, 0, DataSendCallback, connection); } else { connection.Socket.BeginReceive(connection.Buffer, 0, connection.Buffer.Length, 0, DataReadCallback, connection); } } } catch (SocketException e) { CloseConnection(connection); MessageBox.Show(String.Format("Socket exception : {0}", e.SocketErrorCode)); } catch (Exception e) { CloseConnection(connection); MessageBox.Show(String.Format("exception : {0}", e.Message)); } }