public void SendMessage(string text) { try { if (_Client.Connected) { var packet = new MessagePacket() { NickName = NickName, Message = text }; byte[] buffer = Encoding.UTF8.GetBytes(packet.ToString()); _Client.Send(buffer); } } catch (Exception ex) { WriteLog.WriteLogger(ex.ToString()); } }
// Loop for listening and updating dashboard data. static void ListenLoop() { try { while (Receiver.State != OscSocketState.Closed) { if (Receiver.State == OscSocketState.Connected) { // Get the next message, this will block until one arrives or the socket is closed. OscPacket Packet = Receiver.Receive(); // Slap the packet in the most recent message variable. App.Current.Dispatcher.InvokeAsync(() => { // Parses the packet into a message array. OscBundle MessageBundle = OscBundle.Parse(Packet.ToString()); foreach (OscPacket MessagePacket in MessageBundle.ToArray()) { // Get the latest message. OscMessage LatestMessage = OscMessage.Parse(MessagePacket.ToString()); // Determine if the message should be overwritten. bool OverwriteMessage = false; int OverwriteMessageIndex = 0; foreach (OscData Message in ReceivedOscData) { if (Message.Path == LatestMessage.Address) { OverwriteMessageIndex = ReceivedOscData.IndexOf(Message); OverwriteMessage = true; } } // Cut the address out of the data string. string DataString = ""; string[] DataArray = LatestMessage.ToString().Split(','); for (int i = 1; i < DataArray.Length; i++) { DataString += DataArray[i]; } // Add the message to the data grid, or overwrite its data. if (OverwriteMessage) { ReceivedOscData.RemoveAt(OverwriteMessageIndex); ReceivedOscData.Insert(OverwriteMessageIndex, new OscData() { Path = LatestMessage.Address, Data = DataString }); } else { ReceivedOscData.Add(new OscData() { Path = LatestMessage.Address, Data = DataString }); } } }); } } } catch (Exception Ex) { // Display the exeception if it occurred, while receiving. if (Receiver.State == OscSocketState.Connected) { MessageBox.Show(Ex.Message, "Exception Occurred", MessageBoxButton.OK, MessageBoxImage.Warning); } } }
public static void SendMessage(byte[] data, TcpClient client, Server server) { try { string message = ""; // Unpack the data MessagePacket packet = Packet.Unpack <MessagePacket>(data); server.DebugInfo("SendMessageReq Recieved: " + packet.ToString()); // Who is making the query ClientStatus c = server.GetClient(packet.From.Username); // Check te basics again and again if (ClientsManagement.CheckBasics(c, ClientStatus.Status.Disconnected, packet.Alea, out message)) { // Check if destination exists if (!server.Clients.Any(d => d.Client.Username == packet.To.Username)) { server.DebugInfo("Send Message Error: " + "Destination doesn't exist"); server.Tcp.SendError("Destination doesn't exist", client); return; } // Store the message on database using (var db = new Models.ServerDatabase()) { // Create the message Models.Message m = new Models.Message() { From = db.Clients.Single(n => n.Username == c.Client.Username), To = db.Clients.Single(n => n.Username == packet.To.Username), Date = packet.Date, Content = packet.Content }; // Check if destination is on chat if (server.ClientsOnChat.Any(d => d.Key.Equals(packet.To.Username))) { // If exist save the message and send him as well as readed message m.Read = true; server.DebugInfo("Message from : " + packet.From.Username + " sended to: " + packet.To.Username); // Send the message to destination changing the type of package packet.Type = (byte)PacketTypes.SendMessageAck; server.Tcp.SendMessage(packet.Pack(), server.ClientsOnChat[packet.To.Username]); } else { m.Read = false; } db.Messages.InsertOnSubmit(m); db.SubmitChanges(); } } else { server.DebugInfo("Send Message Error: " + message); server.Tcp.SendError(message, client); } } catch (SqlException) { server.DebugInfo("Send Message Error: database error."); server.Tcp.SendError("Database error", client); } }