123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /// <summary>
- /// 网络消息处理中心
- /// </summary>
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using System.Collections.Concurrent;
- using System;
- using socket;
- using BossServer;
- public struct sEvent_GameLogicData
- {
- public eGameLogicEventType _eventType;
- public object _eventData;
- }
- public struct sEvent_NetMessageData
- {
- public eProtocalCommand _eventType;
- public byte[] _eventData;
- public static implicit operator sEvent_NetMessageData(sSocketData src)
- {
- var ret = new sEvent_NetMessageData()
- {
- _eventType = src.ProtocallType,
- _eventData = src.Data
- };
- return ret;
- }
- }
- public delegate void Callback_GameLogic_Handle(object _data);
- public delegate void Callback_NetMessage_Handle(byte[] _data);
- public class MessageCenter : MonoSingleton<MessageCenter>
- {
- private Dictionary<eProtocalCommand, Callback_NetMessage_Handle> _netMessage_EventList = new Dictionary<eProtocalCommand, Callback_NetMessage_Handle>();
- public ConcurrentQueue<sEvent_NetMessageData> _netMessageDataQueue = new ConcurrentQueue<sEvent_NetMessageData>();
- private Dictionary<eGameLogicEventType, Callback_GameLogic_Handle> _gameLogic_EventList = new Dictionary<eGameLogicEventType, Callback_GameLogic_Handle>();
- public ConcurrentQueue<sEvent_GameLogicData> _gameLogicDataQueue = new ConcurrentQueue<sEvent_GameLogicData>();
- //添加网络事件观察者
- public void addObsever(eProtocalCommand _protocalType, Callback_NetMessage_Handle _callback)
- {
- if (_netMessage_EventList.ContainsKey(_protocalType))
- {
- _netMessage_EventList[_protocalType] += _callback;
- }
- else
- {
- _netMessage_EventList.Add(_protocalType, _callback);
- }
- }
- //删除网络事件观察者
- public void removeObserver(eProtocalCommand _protocalType, Callback_NetMessage_Handle _callback)
- {
- if (_netMessage_EventList.ContainsKey(_protocalType))
- {
- _netMessage_EventList[_protocalType] -= _callback;
- if (_netMessage_EventList[_protocalType] == null)
- {
- _netMessage_EventList.Remove(_protocalType);
- }
- }
- }
- //添加普通事件观察者
- public void AddEventListener(eGameLogicEventType _eventType, Callback_GameLogic_Handle _callback)
- {
- if (_gameLogic_EventList.ContainsKey(_eventType))
- {
- _gameLogic_EventList[_eventType] += _callback;
- }
- else
- {
- _gameLogic_EventList.Add(_eventType, _callback);
- }
- }
- //删除普通事件观察者
- public void RemoveEventListener(eGameLogicEventType _eventType, Callback_GameLogic_Handle _callback)
- {
- if (_gameLogic_EventList.ContainsKey(_eventType))
- {
- _gameLogic_EventList[_eventType] -= _callback;
- if (_gameLogic_EventList[_eventType] == null)
- {
- _gameLogic_EventList.Remove(_eventType);
- }
- }
- }
- //推送消息
- public void PostEvent(eGameLogicEventType _eventType, object data = null)
- {
- if (_gameLogic_EventList.ContainsKey(_eventType))
- {
- _gameLogic_EventList[_eventType](data);
- }
- }
- public void Init() { }
- void Update()
- {
- while (_gameLogicDataQueue.TryDequeue(out sEvent_GameLogicData tmpGameLogicData))
- {
- if (_gameLogic_EventList.ContainsKey(tmpGameLogicData._eventType))
- {
- _gameLogic_EventList[tmpGameLogicData._eventType](tmpGameLogicData._eventData);
- }
- }
- while (_netMessageDataQueue.TryDequeue(out sEvent_NetMessageData tmpNetMessageData))
- {
- if (_netMessage_EventList.ContainsKey(tmpNetMessageData._eventType))
- {
- _netMessage_EventList[tmpNetMessageData._eventType](tmpNetMessageData._eventData);
- }
- }
- }
- override protected void DoOnDestroy()
- {
- //SocketManager.Instance.Close();
- base.DoOnDestroy();
- }
- }
|