游戏服务器引擎的设计(二)开发游戏服务器底层 及libuv使用

服务器底层,个人任务认为稳定、高效、易用最重要。如果非要排个序的话 稳定 > 易用 > 高效。

我是用的libuv这个库作为基础支持库的。为啥用它,主要是网络库不想自己写了,有现成的最好。这个库是轻量级的库而且跨平台,windows下分装了IOCP,linux下分装了EPOOL。 然后这个库带了一些其他接口,比如说基础的定时器 都是挺好用的,所以就用了。

我写的底层库打算实现一个空的框架,所有业务必须以模块的方式注册进去,给出必要的接口,业务逻辑上层去实现。如下所示:

// 核心服务
#ifndef ServerCore_h__
#define ServerCore_h__

#include "Common.h"
#include <functional>
#include <vector>

namespace SCore
{
#define LOGICSERVICE_PRIVATE_DATA_SIZE 16

	// 逻辑服务
	class ILogicService
	{
		// 事件处理函数类型
		typedef void (*EventSyncFunc)(ILogicService* self, void* param);

		// 定时器回调函数类型
		typedef void (*TimerProcFunc)(ILogicService* self, void* param);

		friend class ServerCore;
	public:
		ILogicService();
		virtual ~ILogicService();

		// 加载配置
		virtual void LoadConfig() {};

		// 初始化
		virtual void OnInit() { }

		// 心跳
		virtual void OnUpdate() {};

		// 销毁时被调用
		virtual void OnDestory() { SetDestoryFinish(); };

		// 设置销毁完成, 当设置销毁完成后,才能正式从核心服务中移除,所有其他销毁动作必须在此之前执行
		void SetDestoryFinish();

		// 获取状态
		virtual int GetStatus() { return m_nStatus; }

		// 设置心跳时间间隔
		void SetHeartInterval(int intervalTime = ServiceHeartInterval_None);

		// 获取服务类型
		int GetServiceType();

		// 获取服务器ID
		long long GetServiceID();

		// 注册事件同步处理接口
		void RegisterSyncEvent(int eventID, EventSyncFunc func);

		// 移除事件同步处理接口
		void UnRegisterSyncEvent(int eventID, EventSyncFunc func);

		// 触发同步事件
		// @eventID		事件ID
		// @param		参数
		void TriggerSyncEvent(int eventID, void* param);

		// 触发同步事件
		// @eventID		事件ID
		// @param		参数
		// @serviceID	指定serviceID 逻辑服务处理
		void TriggerSyncEvent(int eventID, void* param, long long serviceID);

		// 触发同步事件
		// @eventID		事件ID
		// @param		参数
		// @serviceType	指定逻辑服务类型处理
		void TriggerSyncEventByType(int eventID, void* param, int serviceType);

		// 添加定时器
		// @startTime	定时器开始执行时间(多少毫秒后开始执行)
		// @repeat		非单次执行的定时器,每次执行的时间间隔ms 如果为0 则只执行一次
		// @maxRunCount 执行总次数,
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值