コード例 #1
0
ファイル: ServerForm.cs プロジェクト: jpmac26/AODX
 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);
     }
 }
コード例 #2
0
ファイル: ServerForm.cs プロジェクト: jpmac26/AODX
 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);
     }
 }
コード例 #3
0
ファイル: ServerForm.cs プロジェクト: jpmac26/AODX
        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);
            }
        }
コード例 #4
0
ファイル: ServerForm.cs プロジェクト: jpmac26/AODX
        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);
            }
        }