Ver código fonte

加了一些测试。

zzj 6 anos atrás
pai
commit
fa94796003
6 arquivos alterados com 65 adições e 56 exclusões
  1. 50 0
      area.cpp
  2. 4 52
      area.h
  3. 1 1
      card.cpp
  4. 1 1
      card.h
  5. 4 0
      worker.cpp
  6. 5 2
      znet.cpp

+ 50 - 0
area.cpp

@@ -44,3 +44,53 @@ std::vector<std::shared_ptr<area>> area_list::get_area(const point&pt)
 	return std::move(ret);
 }
 
+
+void area_tool::on_point(int card_id,const point&pt,double speed)
+{
+	std::vector<std::shared_ptr<area>> areas=area_list::instance()->get_area(pt);//找出所有的区域
+	std::sort(areas.begin(),areas.end(),[](std::shared_ptr<area>&l,std::shared_ptr<area>&r){
+			return l->id()<r->id();
+			});
+
+	auto c1=m_clist.begin(),ce=m_clist.end();
+	auto a1=areas.begin() ,ae=areas.end();
+
+	std::vector<std::shared_ptr<area_hover>> nlist;
+
+	while (c1!=ce && a1!=ae)
+	{
+		if ((*c1)->id()<(*a1)->id()) 
+		{ 
+			do_leave_biz(card_id,*c1,speed);
+			++c1;
+		}
+		else if ((*a1)->id()<(*c1)->id()) 
+		{
+			nlist.push_back(std::make_shared<area_hover>(*a1,pt,speed));
+			do_enter_biz(card_id,nlist.back(),speed);
+			++a1;
+		}
+		else 
+		{ 
+			nlist.push_back(*c1);
+			do_hover_biz(card_id,nlist.back(),speed);
+			++c1,++a1;
+		}
+	}
+
+	while(c1!=ce)
+	{
+		do_leave_biz(card_id,*c1,speed);
+		++c1;
+	}
+
+	while(a1!=ae)
+	{
+		nlist.push_back(std::make_shared<area_hover>(*a1,pt,speed));
+		do_enter_biz(card_id,nlist.back(),speed);
+		++a1;
+	}
+
+	m_clist=std::move(nlist);
+}
+

+ 4 - 52
area.h

@@ -43,7 +43,7 @@ struct area_list:single_base<area_list,int,std::shared_ptr<area>>
 	area_list();
 
 	std::vector<std::shared_ptr<area>> get_area(const point&pt);
-	static void init_from_db()
+	void init_from_db()
 	{
 	}
 };
@@ -86,55 +86,7 @@ struct area_hover
 struct area_tool
 {
 	std::vector<std::shared_ptr<area_hover>> m_clist;
-	void on_point(int card_id,const point&pt,double speed)
-	{
-		std::vector<std::shared_ptr<area>> areas=area_list::instance()->get_area(pt);//找出所有的区域
-		std::sort(areas.begin(),areas.end(),[](std::shared_ptr<area>&l,std::shared_ptr<area>&r){
-			return l->id()<r->id();
-		});
-
-		auto c1=m_clist.begin(),ce=m_clist.end();
-		auto a1=areas.begin() ,ae=areas.end();
-
-		std::vector<std::shared_ptr<area_hover>> nlist;
-
-		while (c1!=ce && a1!=ae)
-		{
-			if ((*c1)->id()<(*a1)->id()) 
-			{ 
-				do_leave_biz(card_id,*c1,speed);
-				++c1;
-			}
-			else if ((*a1)->id()<(*c1)->id()) 
-			{
-				nlist.push_back(std::make_shared<area_hover>(*a1,pt,speed));
-				do_enter_biz(card_id,nlist.back(),speed);
-				++a1;
-			}
-			else 
-			{ 
-				nlist.push_back(*c1);
-				do_hover_biz(card_id,nlist.back(),speed);
-				++c1,++a1;
-			}
-		}
-
-		while(c1!=ce)
-		{
-			do_leave_biz(card_id,*c1,speed);
-			++c1;
-		}
-
-		while(a1!=ae)
-		{
-			nlist.push_back(std::make_shared<area_hover>(*a1,pt,speed));
-			do_enter_biz(card_id,nlist.back(),speed);
-			++a1;
-		}
-
-		m_clist=std::move(nlist);
-	}
-
+	void on_point(int card_id,const point&pt,double speed);
 
 	//检测是否超时
 	void on_timer(int card_id)
@@ -147,12 +99,12 @@ struct area_tool
 		a->m_area->on_hover(card_id,a,speed);
 	}
 
-	void do_enter_biz(int card_id,std::shared_ptr<area_hover> a,double speed)
+	void do_enter_biz(int card_id,std::shared_ptr<area_hover>&a,double speed)
 	{
 		a->m_area->on_enter(card_id,a,speed);
 	}
 
-	void do_leave_biz(int card_id,std::shared_ptr<area_hover> a,double speed)
+	void do_leave_biz(int card_id,std::shared_ptr<area_hover>&a,double speed)
 	{
 		a->m_area->on_leave(card_id,a,speed);
 	}

+ 1 - 1
card.cpp

@@ -248,5 +248,5 @@ struct card_list_impl:card_list
 };
 
 template<> std::shared_ptr<card_list> 
-single_base<card_list, int, std::shared_ptr<card_location_base>>::m_instance=std::make_shared<card_list_impl>();
+single_base<card_list, int64_t, std::shared_ptr<card_location_base>>::m_instance=std::make_shared<card_list_impl>();
 

+ 1 - 1
card.h

@@ -11,7 +11,7 @@ struct card_location_base;
 struct task;
 template<typename T> struct zloop;
 
-struct card_list:single_base<card_list,int,std::shared_ptr<card_location_base>>
+struct card_list:single_base<card_list,int64_t,std::shared_ptr<card_location_base>>
 {
 	virtual void on_message(zloop<task*> *loop,const message_locinfo&loc,bool is_history)=0;
 	virtual ~card_list(){}

+ 4 - 0
worker.cpp

@@ -78,6 +78,10 @@ struct worker_impl:worker
 	std::atomic<int> m_init_flag{-2};
 	virtual void stop()
 	{
+		int exp=0;
+		if(!m_init_flag.compare_exchange_strong (exp,1))
+			return;
+
 		for(auto&thr:m_threads)
 			thr->stop();
 

+ 5 - 2
znet.cpp

@@ -15,6 +15,7 @@
 #include <znet.h>
 #include <zloop.h>
 #include <clock.h>
+#include <worker.h>
 
 #include "config_file.h"
 
@@ -443,9 +444,11 @@ struct signal_w:ev::sig
 
 	void operator()(ev::sig &w, int s)
 	{
-		stop();
 		log_info("recved signal %d",s);
-		m_ic.async_stop();
+
+		worker::instance()->stop();
+		stop();
+		m_ic.stop();
 	}
 };