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); } } }