// Proc private void processReceivedSendcode(ChatMessage p) { ChatReceipt receipt = new ChatReceipt(cm.self.hexCode, p.owner, p.tickCode); if (!(cm.neighbours[p.ownerHex].nickname == p.owner)) { cm.neighbours[p.ownerHex].nickname = p.owner; LVUserItem[] bucket = new LVUserItem[listView1.Items.Count]; listView1.Items.CopyTo(bucket, 0); listView1.Items.Clear(); listView1.Items.AddRange(bucket); } // adviseReceived if (Properties.Settings.Default.Secret != "") { string message = ("R:" + receipt); byte[] key = Convert.FromBase64String(Properties.Settings.Default.Secret.Split(':')[0]); byte[] iv = Convert.FromBase64String(Properties.Settings.Default.Secret.Split(':')[1]); byte[] msgB = MulticonMgr.EncryptStringToBytes(message, key, iv); MulticonMgr.sendBytes(msgB, cm.neighbours[p.ownerHex].InPoint, cm.outClient); } else { MulticonMgr.sendString( ("R:" + receipt), cm.neighbours[p.ownerHex].InPoint, cm.outClient); } //identify duplicates and add and rotate. bool isDup = false; foreach (ChatMessage histMsg in ConvoStack) { if (histMsg.tickCode == p.tickCode) { if (histMsg.owner == p.owner) { isDup = true; } } } if (!isDup) { if (ConvoStack.Count > (Properties.Settings.Default.ChatHistory)) { ConvoStack.RemoveAt(0); } ConvoStack.Add(p); } }
// END LISTENING LOOP // PROCESS FUNCTIONS private void processReceivedSendcode(string p) { //split packed messages and handle string[] msgArray = p.Substring(2, p.Length - 2).Split(';'); foreach (string msg in msgArray) { ChatMessage msgMsg = new ChatMessage(msg); cm.neighbours[msgMsg.ownerHex].nickname = msgMsg.owner; ChatReceipt receipt = new ChatReceipt(cm.self.hexCode, msgMsg.owner, msgMsg.tickCode); bool isDup = false; // adviseReceived if (Properties.Settings.Default.Secret != "") { string message = ("R:" + receipt); byte[] key = Convert.FromBase64String(Properties.Settings.Default.Secret.Split(':')[0]); byte[] iv = Convert.FromBase64String(Properties.Settings.Default.Secret.Split(':')[1]); byte[] msgB = MulticonMgr.EncryptStringToBytes(message, key, iv); MulticonMgr.sendBytes(msgB, cm.neighbours[msgMsg.ownerHex].InPoint, cm.outClient); } else { MulticonMgr.sendString( ("R:" + receipt), cm.neighbours[msgMsg.ownerHex].InPoint, cm.outClient); } //identify duplicates and add and rotate. foreach (ChatMessage histMsg in ConvoStack) { if (histMsg.tickCode == msgMsg.tickCode) { if (histMsg.owner == msgMsg.owner) { isDup = true; } } } if (!isDup) { if (ConvoStack.Count > (Properties.Settings.Default.ChatHistory)) { ConvoStack.RemoveAt(0); } ConvoStack.Add(msgMsg); } } }
// Proc private void processSend() { //remove already-received messages, pack message, send; foreach (ChatEndpoint n in cm.neighbours.Values) { ArrayList RemoveBucket = new ArrayList(); foreach (ChatMessage Sending in n.MsgStack) { lock (this) { foreach (ChatReceipt Received in n.ReceivedStack) { if (Sending.owner == Received.Owner && Sending.tickCode == Received.Tick) { RemoveBucket.Add(Sending); } } } } foreach (ChatMessage RemMsg in RemoveBucket) { n.MsgStack.Remove(RemMsg); } if (n.MsgStack.Count > 0) { string message = "S:"; foreach (ChatMessage Sending in n.MsgStack) { message += Sending.ToString(); //identify duplicates and add and rotate. bool isDup = false; foreach (ChatMessage histMsg in ConvoStack) { if (histMsg.tickCode == Sending.tickCode) { if (histMsg.owner == Sending.owner) { isDup = true; } } } if (!isDup) { if (ConvoStack.Count > (Properties.Settings.Default.ChatHistory)) { ConvoStack.RemoveAt(0); } ConvoStack.Add(Sending); } } message = message.Substring(0, message.Length); if (Properties.Settings.Default.Secret != "") { byte[] key = Convert.FromBase64String(Properties.Settings.Default.Secret.Split(':')[0]); byte[] iv = Convert.FromBase64String(Properties.Settings.Default.Secret.Split(':')[1]); byte[] msgB = MulticonMgr.EncryptStringToBytes(message, key, iv); MulticonMgr.sendBytes(msgB, n.InPoint, cm.outClient); } else { MulticonMgr.sendString(message, n.InPoint, cm.outClient); } } } }