public static void Main(string[] args) { string host = "tcp://127.0.0.1:43210"; FFBroker ffbroker = new FFBroker(); ffbroker.Open(host); string strServiceName = "worker#0"; FFRpc ffrpc = new FFRpc(strServiceName); if (ffrpc.Open(host) == false) { FFLog.Trace("ffrpc open failed!"); } ffrpc.Reg((SessionEnterWorkerReq req) => { FFLog.Trace(string.Format("ffrpc SessionEnterWorkerReq £¡£¡£¡FromGate={0}", req.From_gate)); return(req); }); Console.ReadKey(); ffrpc.GetTaskQueue().Post(() => { SessionEnterWorkerReq reqMsg = new SessionEnterWorkerReq() { From_gate = "gate#0" }; WorkerCallMsgReq reqWorkerCall = new WorkerCallMsgReq(); //ffrpc.Call(strServiceName, reqMsg); reqMsg.From_gate = "gate#1"; ffrpc.Call(strServiceName, reqWorkerCall, (SessionEnterWorkerReq retMsg) => { FFLog.Trace(string.Format("ffrpc SessionEnterWorkerReq return£¡£¡£¡FromGate={0}", retMsg.From_gate)); }); }); //FFNet.Timerout(1000, Theout); //FFNet.Timerout(2000, Theout); FFNet.Timerout(100000, () => { FFLog.Debug("AAAAAAAAAAAAAAA1"); ffrpc.Close(); }); FFLog.Trace(string.Format("main! {0}", System.Threading.Thread.CurrentThread.ManagedThreadId.ToString())); AppDomain.CurrentDomain.ProcessExit += (sender, arg) => { FFLog.Trace("exist!!"); }; Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs e) => { e.Cancel = true; FFLog.Trace("exist3!!"); FFNet.Cleanup(); FFLog.Cleanup(); }; Console.ReadKey(); FFLog.Trace("exist!!"); FFNet.Cleanup(); FFLog.Cleanup(); }
public bool Open(string strBrokerHost, int nWorkerIndex) { m_nWorkerIndex = nWorkerIndex; m_strWorkerName = string.Format("worker#{0}", m_nWorkerIndex); m_ffrpc = new FFRpc(m_strWorkerName); if (m_ffrpc.Open(strBrokerHost) == false) { FFLog.Error("worker ffrpc open failed!"); return(false); } m_ffrpc.Reg <RouteLogicMsgReq, EmptyMsgRet>(this.OnRouteLogicMsgReq); m_ffrpc.Reg <SessionOfflineReq, EmptyMsgRet>(this.OnSessionOfflineReq); FFNet.Timerout(1000, this.HandleMonsterAI); return(true); }
public void HandleMonsterAI() { foreach (Role role in m_dictRoles.Values) { if (role.hp == 0) { if (Util.GetNowTimeMs() - role.nLastAttackedTime < 5000) { continue; } role.hp = role.maxhp; Pbmsg.EnterMapRet enterMapRet = BuildEnterMsg(role); BroadcastPlayerMsg <Pbmsg.EnterMapRet>(Pbmsg.ServerCmdDef.SEnterMap, enterMapRet); continue; } if (!(role is Monster)) { continue; } Monster monster = role as Monster; if (monster.nLastAttackedRoleID == 0) { continue; } Player player = GetPlayerBySessionID(monster.nLastAttackedRoleID); if (player == null || player.hp == 0) { monster.nLastAttackedRoleID = 0; continue; } int nDistance = Util.Distance(monster.x, monster.y, player.x, player.y); if (nDistance <= 1) { if (Util.GetNowTimeMs() - monster.nLastAttackTime < 1000) { continue; } monster.nLastAttackTime = Util.GetNowTimeMs(); Pbmsg.AttackRet monsterAttackMsg = new Pbmsg.AttackRet() { Id = monster.GetID(), Targetid = player.GetID(), }; BroadcastPlayerMsg <Pbmsg.AttackRet>(Pbmsg.ServerCmdDef.SAttack, monsterAttackMsg); Random rd = new Random(); Role roleTarget = player; int hpChaneged = rd.Next(1, roleTarget.maxhp / 10); if (roleTarget.hp >= hpChaneged) { roleTarget.hp -= hpChaneged; } else { roleTarget.hp = 0; } roleTarget.nLastAttackedTime = Util.GetNowTimeMs(); Pbmsg.HPChangedRet retMsg3 = new Pbmsg.HPChangedRet() { Id = roleTarget.GetID(), ValCur = roleTarget.hp, ValChanged = hpChaneged, }; BroadcastPlayerMsg <Pbmsg.HPChangedRet>(Pbmsg.ServerCmdDef.SHpChanged, retMsg3); } else//!怪物寻路追打角色 { GamePoint nextPos = FindPath(new GamePoint(monster.x, monster.y), new GamePoint(player.x, player.y)); if (GetRoleByPos(nextPos.x, nextPos.y) != null) { continue; } monster.x = nextPos.x; monster.y = nextPos.y; Pbmsg.RunRet runRet = new Pbmsg.RunRet() { Id = monster.GetID(), X = monster.x, Y = monster.y, }; BroadcastPlayerMsg <Pbmsg.RunRet>(Pbmsg.ServerCmdDef.SRun, runRet); } } FFNet.Timerout(800, this.HandleMonsterAI); }
public void HandleMonsterAI() { foreach (Role role in m_dictRoles.Values) { if (role.hp == 0) { if (Util.GetNowTimeMs() - role.nLastAttackedTime < 5000) { continue; } role.hp = 100; Pbmsg.EnterMapRet enterMapRet = BuildEnterMsg(role); BroadcastPlayerMsg <Pbmsg.EnterMapRet>(Pbmsg.ServerCmdDef.SEnterMap, enterMapRet); continue; } if (!(role is Monster)) { continue; } Monster monster = role as Monster; if (monster.nLastAttackedRoleID == 0) { continue; } Player player = GetPlayerBySessionID(monster.nLastAttackedRoleID); if (player == null || player.hp == 0) { monster.nLastAttackedRoleID = 0; continue; } int nDistance = Util.Distance(monster.x, monster.y, player.x, player.y); if (nDistance <= 1) { Pbmsg.AttackRet monsterAttackMsg = new Pbmsg.AttackRet() { Id = monster.GetID(), Targetid = player.GetID(), }; BroadcastPlayerMsg <Pbmsg.AttackRet>(Pbmsg.ServerCmdDef.SAttack, monsterAttackMsg); Random rd = new Random(); int hpChaneged = 5 + rd.Next() % 5; Role roleTarget = player; if (roleTarget.hp >= hpChaneged) { roleTarget.hp -= hpChaneged; } else { roleTarget.hp = 0; } roleTarget.nLastAttackedTime = Util.GetNowTimeMs(); Pbmsg.HPChangedRet retMsg3 = new Pbmsg.HPChangedRet() { Id = roleTarget.GetID(), ValCur = roleTarget.hp, ValChanged = hpChaneged, }; BroadcastPlayerMsg <Pbmsg.HPChangedRet>(Pbmsg.ServerCmdDef.SHpChanged, retMsg3); } } FFNet.Timerout(2000, this.HandleMonsterAI); }