Exemple #1
0
        public Task ReceiveAsync(IContext context)
        {
            switch (context.Message)
            {
            case RegisterPid registerPid:
                ActorManagement.TryAddPid(registerPid.Sender, registerPid.Name);
                context.Respond(new Done());
                break;

            case RequestPid requestPid:
                var pid = ActorManagement.TryGetPid(requestPid.Name);
                context.Respond(new ResponsePid()
                {
                    Sender = pid
                });
                break;

            case RequestPackage package:
                ResponsePackage repPackage = new ResponsePackage();
                repPackage.InitPackage(package);
                IByteBuffer data = GameEnvironment.ActionDispatcher.TryEncodePackage(repPackage);
                SessionManager.PostSend(repPackage.UserId, data);
                break;
            }
            return(Actor.Done);
        }
 private void OnCheckTableCallback(object state)
 {
     if (Interlocked.CompareExchange(ref isCheckTableWorking, 1, 0) == 0)
     {
         try
         {
             foreach (var item in roomList.Keys)
             {
                 var roomPid = ActorManagement.TryGetPid <RoomActor>(item);
                 if (roomPid != null)
                 {
                     roomPid.Tell(new CheckTimeout());
                 }
             }
         }
         catch (Exception er)
         {
             TraceLog.WriteError("OnTimerCallback error:{0}", er);
         }
         finally
         {
             Interlocked.Exchange(ref isCheckTableWorking, 0);
         }
     }
 }