예제 #1
0
        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();
        }
예제 #4
0
        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;
        }