public async Task <Func <Task> > Subscribe <TEventArgs>(string eventName, EventHandler <TEventArgs> eventHandler, Dictionary <string, string> eventFilter = null) where TEventArgs : EventArgs { // match event name with the argument type MessageTypeProvider.Register(eventName, typeof(TEventArgs)); // prepare subscription metadata var subscription = new ClientSubscription <TEventArgs> { SubscriptionId = GenerateMessageId(), EventName = eventName, EventFilter = eventFilter, EventHandler = eventHandler, }; // notify the server about the new subscription var subscrMessage = subscription.CreateSubscriptionMessage(); await Call(subscrMessage); // register subscription in the subscription manager var unsubscribe = SubscriptionManager.Add(subscription); var unsubMessage = subscription.CreateUnsubscriptionMessage(); // return unsubscription action return(async() => { unsubscribe(); await Call(unsubMessage); }); }
public async Task Initialize() { Log.Debug("Initializing single table queue gateway"); var schema = await DbSchemaReader.ReadTableSchema(_connectionFactory, _tableName).ConfigureAwait(false); _properties = schema.Where(x => x.Name.ToLower() != "rownumber").Select(FromDbColumnInfo).ToArray(); _messageType = MessageTypeProvider.BuildMessageType(new MessageTypeDefinition(_type, _properties)); Log.Debug("Initialization complete"); }
public NetworkManager() { //UnityEngine.Debuger.Log("NetworkManager::NetworkManager()"); proxy = new KiHanProxy(); router = proxy.Router; typeProvider = proxy.TypeProvider; #if UNITY_EDITOR && KHNET_DEBUG typeProvider_D = proxy.TypeProvider_D; #endif NetworkManager._net_work_proxy = proxy; ///注册命令字... registerTypes(); registerDTypes(); }
public KiHanProxy() { _connectionDict = new Dictionary <int, IConnection>(); _connectionsArr = new List <IConnection>(); this._typeProvider = new MessageTypeProvider(); #if UNITY_EDITOR && KHNET_DEBUG this._typeProvider_D = new MessageTypeProvider(); #endif this._router = new MessageRouter(); this._messageQueue = new NetworkMessageQueue(_router); ///代理.. __Proxy.__DistributeMessage = _messageQueue.Distribute; __Proxy.__QueueAddMessage = _messageQueue.AddMessage; this._defaultConn = null; this._send_head.MagicNum = (ushort)MagicNum; this._send_head.Format = ClientHeadFormatType.Protobuf; }