Esempio n. 1
0
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="serviceID">服务号</param>
        /// <param name="message">消息实体</param>
        /// <returns></returns>
        public LazynetService SendSharpMessage(int serviceID, string routeUrl, object[] parameters)
        {
            LazynetServiceMessage message = new LazynetServiceMessage(LazynetMessageType.Normal, routeUrl, parameters);

            this.Context.RecvMessage(serviceID, message);
            return(this);
        }
Esempio n. 2
0
        public object[] CallBack(LazynetServiceMessage message)
        {
            var result = this.MethodInfo?.CallMethod(this.Instance, message.Parameters);

            return(new object[] {
                result
            });
        }
Esempio n. 3
0
        /// <summary>
        /// 断线
        /// </summary>
        /// <param name="ctx"></param>
        public void Inactive(LazynetChannelHandlerContext ctx)
        {
            var parameters = new object[] {
                ctx,
                ctx.Channel.RemoteAddress.ToString()
            };
            var serviceMessage = new LazynetServiceMessage(LazynetMessageType.Normal, ServiceContext.SocketEvent.InactiveEvent, parameters);

            ServiceContext.Context.RecvMessage(ServiceContext.ID, serviceMessage);
        }
Esempio n. 4
0
 private void ProcessNormalMessage(LazynetServiceMessage msg)
 {
     if (this.NormalTriggerDict.ContainsKey(msg.RouteUrl))
     {
         var trigger = this.NormalTriggerDict[msg.RouteUrl];
         trigger.CallBack(msg);
     }
     else
     {
         Context.Logger.Info(this.ID.ToString(), "no mapping");
     }
 }
Esempio n. 5
0
 /// <summary>
 /// 接收消息
 /// </summary>
 /// <param name="message"></param>
 /// <returns></returns>
 public LazynetService RecvMessage(LazynetServiceMessage message)
 {
     if (this.MessageQueue.Count > 100000)
     {
         this.Context.Logger.Info(this.ID.ToString(), "超出10万");
         Thread.Sleep(100);
     }
     this.MessageQueue.Enqueue(message);
     this.SetState(LazynetServiceState.Runing);
     this.ManualEvent.Set();
     return(this);
 }
Esempio n. 6
0
 /// <summary>
 /// 处理消息
 /// </summary>
 /// <param name="obj"></param>
 private void ProcessMessage()
 {
     while (true)
     {
         LazynetServiceMessage messageEntity = this.GetMessage();
         if (messageEntity != null)
         {
             //try
             //{
             if (messageEntity.Type == LazynetMessageType.System)
             {
                 int result = ProcessSystemMessage(messageEntity);
                 if (result == 1)
                 {
                     break;
                 }
             }
             else if (messageEntity.Type == LazynetMessageType.Normal)
             {
                 ProcessNormalMessage(messageEntity);
             }
             else
             {
                 // other消息
                 Context.Logger.Info(this.ID.ToString(), "no type message");
             }
             //}
             //catch (Exception ex)
             //{
             //    Context.Logger.Info(this.ID.ToString(), ex.ToString());
             //}
         }
         else
         {
             if (this.State == LazynetServiceState.Runing)
             {
                 this.SetState(LazynetServiceState.Suspend);
                 this.ManualEvent.Reset();
                 this.ManualEvent.WaitOne();
             }
         }
     }
 }
Esempio n. 7
0
        private int ProcessSystemMessage(LazynetServiceMessage msg)
        {
            // 系统消息
            if (msg.RouteUrl.Equals("exit"))
            {
                this.SetState(LazynetServiceState.Exit);
                this.ExitCallback();
                return(1);
            }

            if (this.SystemTriggerDict.ContainsKey(msg.RouteUrl))
            {
                var trigger = this.SystemTriggerDict[msg.RouteUrl];
                trigger.CallBack(msg);
            }
            else
            {
                Context.Logger.Info(this.ID.ToString(), "no mapping");
            }

            return(0);
        }
Esempio n. 8
0
        /// <summary>
        /// 接收从service发过来的消息
        /// </summary>
        /// <param name="serviceID">服务id</param>
        /// <param name="serviceMessage">服务消息</param>
        public void RecvMessage(int serviceID, LazynetServiceMessage serviceMessage)
        {
            if (!this.ServiceDictionary.ContainsKey(serviceID))
            {
                this.Logger.Info(serviceID.ToString(), "不包含这个id");
                return;
            }
            if (serviceMessage is null)
            {
                this.Logger.Info(serviceID.ToString(), "消息实体为空");
                return;
            }
            var globaMessage = new LazynetGlobaMessage()
            {
                ServiceID      = serviceID,
                ServiceMessage = serviceMessage
            };

            lock (globaMessageQueueLock)
            {
                this.GlobaMessageQueue.Enqueue(globaMessage);
            }
            this.MessageEvent.Set();
        }
Esempio n. 9
0
        /// <summary>
        /// 调用方法
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public object[] CallBack(LazynetServiceMessage message)
        {
            var result = this.Function?.Call(message.Parameters);

            return(result);
        }
Esempio n. 10
0
 /// <summary>
 /// 发送消息
 /// </summary>
 /// <param name="serviceID">服务号</param>
 /// <param name="message">消息实体</param>
 /// <returns></returns>
 public LazynetService SendMessage(int serviceID, LazynetServiceMessage message)
 {
     this.Context.RecvMessage(serviceID, message);
     return(this);
 }