private void sendEvidence(Socket sendHere) { foreach (Evidence evi in eviList) { EviData dat = new EviData(evi.name, evi.desc, evi.note, evi.icon, evi.index); byte[] msg = dat.ToByte(); sendHere.BeginSend(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(OnSend), sendHere); System.Threading.Thread.Sleep(100); } }
private void OnReceive(IAsyncResult ar) { try { Socket receiveSocket = (Socket)ar.AsyncState; receiveSocket.EndReceive(ar); if (!isClosing & receiveSocket.Connected) { //If the masterserver is requesting our info (description, user count, etc.) if (byteData[0] == 101 | receiveSocket.RemoteEndPoint == masterSocket.RemoteEndPoint) { sendServerInfo(masterSocket); masterSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnReceive), masterSocket); } else if (byteData[0] == 103) receiveSocket.Close(); else if (byteData[0] == 8) sendEvidence(receiveSocket); else if (byteData[0] == 9) { EviData msg = new EviData(byteData); Evidence evi = new Evidence(); evi.name = msg.strName; evi.desc = msg.strDesc; evi.note = msg.strNote; evi.index = msg.index; using (MemoryStream ms = new MemoryStream(msg.dataBytes)) { evi.icon = Image.FromStream(ms, false, true); } bool found = false; foreach (Evidence item in eviList) { if (item.index == evi.index) { found = true; item.name = evi.name; item.note = evi.note; item.desc = evi.desc; item.icon = evi.icon; break; } } if (found == false) { evi.index = eviList.Count; eviList.Add(evi); } EviData dat = msg; dat.cmdCommand = Command.Evidence; byte[] msgToSend = dat.ToByte(); foreach (ClientInfo client in clientList) { client.socket.BeginSend(msgToSend, 0, msgToSend.Length, SocketFlags.None, new AsyncCallback(OnSend), client.socket); } byteData = new byte[1048576]; //System.Threading.Thread.Sleep(3000); receiveSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnReceive), receiveSocket); } //else if (byteData[0] == 0 | byteData[0] == 1 | byteData[0] == 2 | byteData[0] == 3 | byteData[0] == 4 | byteData[0] == 5 | byteData[0] == 6 | byteData[0] == 7 | byteData[0] == 10 | byteData[0] == 11 | byteData[0] == 12) else if (receiveSocket.RemoteEndPoint != masterSocket.RemoteEndPoint) parseMessage(receiveSocket); else { //TO DO: Look into this, something is definitely wrong when we receive 2 or 3 garbage messages from clients every time they present evidence!!! appendTxtLogSafe("<<" + receiveSocket.RemoteEndPoint.ToString() + " send an invalid packet with the first byte: " + byteData[0] + ">>\r\n"); receiveSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnReceive), receiveSocket); } } } catch (SocketException) { } catch (ObjectDisposedException) { } catch (Exception ex) { if (Program.debug & !isClosing) MessageBox.Show(ex.Message + ".\r\n" + ((Socket)ar.AsyncState)?.RemoteEndPoint?.ToString() + "\r\n" + ex.StackTrace.ToString(), "AODXServer", MessageBoxButtons.OK, MessageBoxIcon.Error); } }