Esempio n. 1
0
        public Action define_server_receiveaction(Receiver rcvr, Sender sndr, bool log_messages)
        {
            HiResTimer hTimer = new HiResTimer();
            DBEngine <int, DBElement <int, string> > db = new DBEngine <int, DBElement <int, string> >();
            Action serviceAction = () =>
            {
                Message     msg        = new Message();
                DBProcessor db_process = new DBProcessor();
                while (true)
                {
                    msg = rcvr.getMessage();   // note use of non-service method to deQ messages
                    if (msg.content == "connection start message" || msg.content == "done" || msg.content == "closeServer")
                    {
                        Console.Write("\n  Received message:");
                        Console.Write("\n  Sender is {0}", msg.fromUrl);
                        Console.Write("\n  content is {0}\n", msg.content);
                    }
                    if (msg.content == "connection start message")
                    {
                        continue; // don't send back start message
                    }
                    if (msg.content == "done")
                    {
                        Console.Write("\n  client has finished\n");
                        Util.swapUrls(ref msg);
                        sndr.sendMessage(msg);
                        continue;
                    }
                    if (msg.content == "closeServer")
                    {
                        Console.Write("received closeServer");
                        break;
                    }
                    hTimer.Start();
                    XElement result = db_process.process_msg <int, DBElement <int, string>, string>(msg.content, db);
                    hTimer.Stop();
                    if (log_messages)
                    {
                        Console.WriteLine("  Time taken to process this request = {0} microseconds", hTimer.ElapsedMicroseconds);
                    }
                    double   tm           = (double)hTimer.ElapsedMicroseconds;
                    XElement request_mesg = XElement.Parse(msg.content);
                    XElement request_id   = request_mesg.Element("Request_ID");
                    XElement request_time = request_mesg.Element("Request_Time_Stamp");
                    string   method       = request_mesg.Element("Request_Type").Value;
                    send_wpf_processing(hTimer.ElapsedMicroseconds, method, sndr, port);
                    diction[method].Add(tm);
                    if (diction[method].Count % 10 == 0)
                    {
                        send_wpf_average(method, sndr, port);
                    }
                    XElement response_server = new XElement("Response_Message");
                    response_server.Add(request_id);
                    response_server.Add(request_time);
                    response_server.Add(result);
                    msg.content = response_server.ToString();
                    Util.swapUrls(ref msg);
                    sndr.sendMessage(msg);
                }
            };

            return(serviceAction);
        }
        static void Main(string[] args)
        {
            DBProcessor db_process = new DBProcessor();
            DBEngine <int, DBElement <int, string> > db = new DBEngine <int, DBElement <int, string> >();

            /*
             * for (int i=0;i<100;i++)
             * {
             * // int tm = DateTime.Now
             *  Thread.Sleep(1100);
             *  Console.WriteLine("tm = {0}", DateTime.Now);
             *  Console.WriteLine("tm1 = {0}", DateTime.Now.ToString("M / dd / yyyy h: mm:ss.fff tt"));
             *  //DateTime.Parse
             *  lkfs
             * }*/
            string tm1 = DateTime.Now.ToString("M / dd / yyyy h: mm:ss.fff tt");

            Thread.Sleep(150);
            string   tm2     = DateTime.Now.ToString("M / dd / yyyy h: mm:ss.fff tt");
            DateTime tma     = DateTime.Parse(tm1);
            DateTime tmb     = DateTime.Parse(tm2);
            TimeSpan ts      = tmb - tma;
            long     ts_tick = ts.Ticks;

            Console.WriteLine("tm1 = {0}\ntm2 = {1}", tm1, tm2);
            Console.WriteLine("ts = {0}\nts_tick = {1}", ts, ts.TotalMilliseconds);

            DateTime tm1_t = DateTime.Now;

            Thread.Sleep(160);
            DateTime tm2_t = DateTime.Now;
            TimeSpan a     = tm2_t - tm1_t;
            long     ms    = a.Ticks;

            Console.WriteLine("tm1 = {0}\ntm2 = {1}", tm1_t, tm2_t);
            Console.WriteLine("a = {0}\nms = {1}", a, (tm2_t - tm1_t).TotalMilliseconds);


            //------<Test inserting Element into database >----------
            XElement request_msg = new XElement("Request_Message");
            XElement req_type    = new XElement("Request_Type", "Insert");
            XElement key         = new XElement("Key", 45);
            // XElement name = new XElement("Name", "element_one");
            XElement descr    = new XElement("Description", "Descr of element_one");
            XElement children = new XElement("Children");
            XElement k1       = new XElement("Key", 55);
            XElement k2       = new XElement("Key", 65);

            children.Add(k1);
            children.Add(k2);
            XElement payload = new XElement("Payload", "This the payload of element one.");

            request_msg.Add(req_type);
            request_msg.Add(key);
            //request_msg.Add(name);
            request_msg.Add(descr);
            request_msg.Add(children);
            request_msg.Add(payload);
            string msg_content = request_msg.ToString();

            Console.WriteLine("Going to call show db:");
            db.showDB();
            Console.WriteLine("Going to to call process query with xml = \n{0}", request_msg.ToString());

            //  string reply = db_process.process_msg<int, DBElement<int, string>, string>(msg_content, db);
            // Console.WriteLine("Reply from processing = {0}", reply);
            db.showDB();

            XElement req_msg3  = new XElement("Request_Message");
            XElement req_type3 = new XElement("Request_Type", "Edit Name");
            XElement req_elem  = new XElement("Key", 45);
            XElement new_name  = new XElement("Name", "This is new name for element.");

            req_msg3.Add(req_type3);
            req_msg3.Add(req_elem);
            req_msg3.Add(new_name);
            Console.WriteLine("Going to to call process query with xml = \n{0}", req_msg3.ToString());
            //  string reply3 = db_process.process_msg<int, DBElement<int, string>, string>(req_msg3.ToString(),db);
            db.showDB();

            XElement req_msg4  = new XElement("Request_Message");
            XElement req_type4 = new XElement("Request_Type", "Edit Description");
            XElement req_key   = new XElement("Key", 45);
            XElement new_descr = new XElement("Description", "New decription for element.");

            req_msg4.Add(req_type4);
            req_msg4.Add(req_key);
            req_msg4.Add(new_descr);
            Console.WriteLine("Going to to call process query with xml = \n{0}", req_msg4.ToString());
            // string reply4 = db_process.process_msg<int, DBElement<int, string>, string>(req_msg4.ToString(), db);
            db.showDB();
            Console.WriteLine("Testing XML");
            XElement rep    = new XElement("Reply_msg");
            XElement result = new XElement("Result", "Success");
            XElement query  = new XElement("Query");
            XElement qres   = new XElement("Type", "File Name");

            rep.Add(qres);
            if (rep.Element("Result") == null)
            {
                Console.Write("Hello");
            }
        }