Example #1
0
        public void ThreadMain()
        {
            int nThreadId = 0;
            string strThreadName = null;
            string strBuffer = null;
            int nResult = 0;
            int percentage = 0;
            string strDeviceID = null;
            int nCurVersion = 0;
            nThreadId = Thread.CurrentThread.ManagedThreadId;
            strThreadName = nThreadId.ToString();

            //Create an instance of the class
            Socket = new SocketTools.SocketWrench();
            Socket.Initialize();
            Socket.Blocking = true;

            if (!Socket.Accept(Handle))
            {
                Server.WriteLine("[ Thread: " + strThreadName + "] unable to accept connection, error " + Socket.LastError);
                return;
            }

            if (Server.RegisterClient(this, Thread.CurrentThread) == false)
            {
                Socket.Disconnect();
                Server.WriteLine("[ Thread: " + strThreadName + "] unable to accept connection, too many active clients");
                return;
            }

            Server.WriteLine("[ Thread: " + strThreadName + "] accepted connection from " + Socket.PeerAddress);

            FileStream fs = null;
            String filePath = "";
            try
            {
                while (!Terminated)
                {
                    if (Socket.IsReadable)
                    {
                        nResult = Socket.Read(ref strBuffer);
                        if (strBuffer.Contains("ACK"))
                            continue;
                        if (nResult == 0)
                        {
                            Server.WriteLine("[ Thread: " + strThreadName + "] connection closed by client" + strBuffer);
                            break;
                        }
                        else if (nResult == -1)
                        {
                            Server.WriteLine("[ Thread: " + strThreadName + "] socket read failed, error " +
                                             Socket.LastError);
                            break;
                        }
                        //get the update file

                        int nRead, doneSofar, Offset;
                        long lSize;

                        nRead = doneSofar = Offset = 0;
                        filePath = @"D:\TMS\8224440103.AGN"; // Server.GetFilePath(strBuffer);
                        fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
                        lSize = fs.Length;
                        nResult = Socket.Write(lSize.ToString(), lSize.ToString().Length);
                        Server.WriteLine("[ Thread: " + strThreadName + "] " + strBuffer + " : File size " +
                                         lSize.ToString() + " bytes");
                        if (nResult == -1)
                        {
                            Server.WriteLine("[ Thread: " + strThreadName + "] socket write failed, error " +
                                             Socket.LastError);
                            break;
                        }
                        byte[] bytes = new byte[768];
                        while (fs.Position < lSize)
                        {
                            if (lSize < 768)
                                nRead = fs.Read(bytes, Offset, (int) lSize);
                            else
                                nRead = fs.Read(bytes, Offset, 768);

                            if (nRead == 0)
                                break;
                            nResult = Socket.Write(bytes, nRead);
                            if (nResult == -1)
                            {
                                break;
                            }
                            doneSofar += nResult;
                            percentage = (doneSofar*100)/(int) lSize;
                            Server.SetTransferStatus(strThreadName + "," + Socket.PeerAddress + "," +
                                                     percentage.ToString());
                            nResult = Socket.Read(ref strBuffer);
                            if (!strBuffer.Equals("ACK"))
                            {
                                Server.SetTransferStatus(strThreadName + "," + Socket.PeerAddress + " (FAILED) ," +
                                                         percentage.ToString());
                            }
                        }
                    }
                    if (fs != null)
                        fs.Close();
                }
            }
            catch (Exception ex)
            {
                Server.WriteLine(strThreadName + " " + ex.Message + " File requested: " + filePath);
            }
            Socket.Disconnect();
        }
Example #2
0
 private void frmServer_Load(object sender, EventArgs e)
 {
     try
     {
         int nIndex = 0;
         //  Create an instance of the SocketWrench class which will
         //  function as our listening (server) socket
         Socket = new SocketTools.SocketWrench();
         if (!Socket.IsInitialized)
         {
             throw new System.Exception("Unable to initialize SocketWrench class");
         }
         // Event handler for the OnAccept event
         Socket.OnAccept += new SocketTools.SocketWrench.OnAcceptEventHandler(Socket_OnAccept);
         LoadSettings();
         if (StartServer())
            WriteLine("tTMS || Server Started : Listening on Port  " + strServerPort);
         else
            WriteLine("tTMS || Server failed to start");
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.StackTrace, "Contact Admin", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
     }
 }