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); } } }
public Task ReceiveAsync(IContext context) { switch (context.Message) { case RequestPackage package: //ResponsePackage repPackage = new ResponsePackage(); //repPackage.InitPackage(package); //IByteBuffer data = GameEnvironment.ActionDispatcher.TryEncodePackage(repPackage); //var session = SessionManager.Get(repPackage.SessionId); //session.PostSend(data); RequestData reqPackage = new RequestData(); reqPackage.ActorName = ActorManagement.GetActorName <LoginActor>(); var loginPid = ActorManagement.GetOrLoadPid <LoginActor>(); loginPid.Tell(reqPackage); break; } return(Actor.Done); }
public void DispatchPackage(RequestData package) { PID srcPid = null; ResponseData response = new ResponseData(); response.IntiPackage(package); try { srcPid = ActorManagement.GetOrLoadPid(package.ActorName); if (srcPid == null) { throw new Exception("获取Actor失败"); } switch ((RpcMsgType)package.MessageType) { case RpcMsgType.LoadRoomInfo: break; case RpcMsgType.LoadUserInfo: break; } } catch (Exception ex) { response.ErrorCode = 10000; response.ErrorInfo = ex.Message; TraceLog.WriteError("{0},{1}", ex.Message, ex.StackTrace); } finally { if (srcPid != null) { srcPid.Tell(response); } } }
public Task ReceiveAsync(IContext context) { switch (context.Message) { case RequestPackage package: try { var pid = ActorManagement.GetOrLoadPid(package.ActorName); if (pid != null) { var response = new ResponsePackage(); response.InitPackage(package); response.Data = "注册成功"; pid.Tell(response); } } catch (Exception ex) { } break; } return(Actor.Done); }
static void Main(string[] args) { //ActorConfig config = new ActorConfig(); //config.LocationIPAddress = "127.0.0.1"; //config.LocationPort = 8001; //config.LocationActorName = "LOCATIONACTORNAME"; //config.ActorIPAddress = "127.0.0.1"; //config.ActorPort = 9001; ////RedisConfig config = new RedisConfig(); ////config.PreRedisKey = "PLUSDATA"; ////config.RedisHost = "127.0.0.1:6379"; ////config.RedisDB = 0; //string txt = Newtonsoft.Json.JsonConvert.SerializeObject(config); //System.IO.File.WriteAllText(string.Format("config/{0}.txt", config.GetType().Name), txt); //try //{ // RedisHelper.Init(); // RedisHelper.HashSet<GameUser>("GAMEUSER", "10038", new GameUser() { UserId = 10038, NickName = "test" }); // var user = RedisHelper.HashGet<GameUser>("GAMEUSER", "10038"); // Stopwatch watch = new Stopwatch(); // watch.Start(); // for (int i = 0; i < 100000; i++) // { // RedisHelper.StringSet(i.ToString(), i.ToString()); // RedisHelper.StringGet(i.ToString()); // } // watch.Stop(); // Console.WriteLine(watch.ElapsedMilliseconds); //} //catch (Exception ex) //{ //} ServerHost host = new ServerHost(); try { Serialization.RegisterFileDescriptor(Messages.ProtosReflection.Descriptor); Remote.Start(GameEnvironment.ActorConfig.ActorIPAddress, GameEnvironment.ActorConfig.ActorPort); #region Location Server var serverLocationPid = Actor.SpawnNamed( Actor.FromProducer(() => new LocationActor()), GameEnvironment.ActorConfig.LocationActorName); #endregion var locationPid = new PID(string.Format("{0}:{1}", GameEnvironment.ActorConfig.LocationIPAddress, GameEnvironment.ActorConfig.LocationPort), GameEnvironment.ActorConfig.LocationActorName); ActorManagement.SetLocationPid(locationPid); #region Data Server var register = Actor.SpawnNamed( Actor.FromProducer(() => new RegisterActor()), ActorManagement.GetActorName <RegisterActor>()); ActorManagement.RegisterPid <RegisterActor>(register); #endregion #region Login Server var loginPid = Actor.SpawnNamed( Actor.FromProducer(() => new LoginActor()), ActorManagement.GetActorName <LoginActor>()); ActorManagement.RegisterPid <LoginActor>(loginPid); #endregion host.RunServerAsync().Wait(); TraceLog.WriteInfo("服务器{0},{1}启动成功", GameEnvironment.SocketConfig.IPAddress, GameEnvironment.SocketConfig.Port); Task.Run(() => { while (true) { Task.Delay(1000).Wait(); Console.WriteLine("Session count:{0},{1}:{2}", SessionManager.GetCount(), ActorManagement.GetPidCount(), ActorManagement.GetPidTypeNames()); Console.WriteLine("线程个数:{0}", ThreadIds.Count); } }); Console.Read(); } catch (Exception ex) { TraceLog.WriteError("服务器{0},{1}启动失败,{2},{3}", GameEnvironment.SocketConfig.IPAddress, GameEnvironment.SocketConfig.Port, ex.Message, ex.StackTrace); } finally { host.CloseServerAsync().Wait(); } }