public void StartMatch(ClientListener client, Pluto pluto) { LoggerHelper.Debug("StartMatch"); foreach (var item in m_roomsData.Values) { if (!item.IsBusy) { var canStart = item.AddClient(client); var ecap = new EntityCellAttachedPluto(); var res = ecap.ServerEncode(GetCellData(client)); client.Send(res); AOINew(client); AOIEntityies(client); if (canStart) { StartBattle(client, pluto); } LoggerHelper.Debug("StartMatch " + canStart); return; } } CreatRoom(client, (int)pluto.Arguments[0], (int)pluto.Arguments[1]); if ((int)pluto.Arguments[0] == 1)//单人模式 { StartBattle(client, pluto); } }
private CellAttachedInfo GetCellData(ClientListener client, bool needProps = true, bool isNewCell = false, bool needName = false) { CellAttachedInfo cellData; if (isNewCell) { cellData = new CellAttachedInfo(); } else { cellData = cellInfoTemplate; } List <EntityPropertyValue> props = null; if (needProps) { props = new List <EntityPropertyValue>() { new EntityPropertyValue(GetEntityDefPropertyByName("TeamId"), client.ClientData.TeamId), new EntityPropertyValue(GetEntityDefPropertyByName("MapId"), client.ClientData.MapId), new EntityPropertyValue(GetEntityDefPropertyByName("HeadQuarterId"), client.ClientData.HeadQuarterId), }; if (needName) { props.Add(new EntityPropertyValue(GetEntityDefPropertyByName("Name"), client.ClientData.Name)); } } cellData.SetData(Avatar, client.ClientData.Id, props); return(cellData); }
public bool AddClient(ClientListener client) { m_currentTeam++; if (m_currentTeam == m_teamCount) { m_currentTeam = 0; } client.ClientData.TeamId = m_currentTeam; m_teamMemberDic[m_currentTeam].Add(client); m_memberList.Add(client); client.ClientData.MapId = MapId; client.ClientData.BelongRoom = this; if (m_currentHeadQuarter == m_mapHeadQuarterMapping[MapId].Count) { LoggerHelper.Error("m_currentHeadQuarter == m_mapHeadQuarterMapping[MapId].Count! " + m_currentHeadQuarter + " MapId: " + MapId); return(true); } client.ClientData.HeadQuarterId = m_mapHeadQuarterMapping[MapId][m_currentHeadQuarter]; m_currentHeadQuarter++; if (m_clientCount == m_memberList.Count) { IsBusy = true; return(true);//可以开始比赛 } else { return(false); } }
private void RemoveClient(ClientListener c) { c.Closed -= client_Closed; lock (m_clientListLocker) { allClientList.Remove(c); allClientDic.Remove(c.ClientData.Id); } }
private void AOIRPC(ClientListener client, Pluto pluto) { var res = pluto.Content; for (int i = 0; i < client.ClientData.BelongRoom.MemberList.Count; i++) { client.ClientData.BelongRoom.MemberList[i].Send(res); //var c = tempList[i]; //c.Send(res); } }
private ClientListener AddClient(Socket handler, bool isDummy = false) { var client = new ClientListener(handler, isDummy); client.ClientData.Id = (uint)Guid.NewGuid().GetHashCode(); client.ClientData.Dbid = client.ClientData.Id; client.Closed += client_Closed; lock (m_clientListLocker) { allClientList.Add(client); allClientDic.Add(client.ClientData.Id, client); } return(client); }
private void AOIDelete(ClientListener client) { var pluto = new AOIDelEntityPluto(); var res = pluto.ServerEncode(GetCellData(client, false)); for (int i = 0; i < client.ClientData.BelongRoom.MemberList.Count; i++) { var c = client.ClientData.BelongRoom.MemberList[i]; if (c != client) { c.Send(res); } } }
private void HandleMove(ClientListener client, Pluto pluto) { if (pluto.Arguments.Length > 0) { var cell = pluto.Arguments[0] as CellAttachedInfo; if (cell != null) { //client.ClientData.face = cell.face; //client.ClientData.Position = cell.position; //UpdatePos(client); } } //LoggerHelper.Debug("HandleMove: " + pluto.Arguments.Length); }
public void CreatRoom(ClientListener client, int teamCount, int clientCount) { LoggerHelper.Debug("CreatRoom " + teamCount + " " + clientCount); var room = new RoomData(teamCount, clientCount); room.Id = (uint)Guid.NewGuid().GetHashCode(); room.MapId = GetRandomMapId(); room.AddClient(client); var ecap = new EntityCellAttachedPluto(); var res = ecap.ServerEncode(GetCellData(client)); client.Send(res); m_roomsData.Add(room.Id, room); }
public void AttrSync(ClientListener client) { var selfPluto = new AvatarAttriSyncPluto(); var selfRes = selfPluto.ServerEncode(cellInfoTemplate); var otherPluto = new OtherAttriSyncPluto(); var otherRes = otherPluto.ServerEncode(cellInfoTemplate); for (int i = 0; i < tempList.Count; i++) { var c = tempList[i]; if (c != client) { c.Send(otherRes); } else { c.Send(selfRes); } } }
private void HandleRPCCall(ClientListener client, Pluto pluto) { switch (pluto.FuncName) { case "HeartBeat": break; case "StartMatch": StartMatch(client, pluto); break; case "CreateAvatarResp": CreateAvatar(); break; default: AOIRPC(client, pluto); break; } //LoggerHelper.Debug("HandleRPCCall: " + pluto.Arguments.Length); }
private void OnDataReceive(ClientListener client, Byte[] data) { var pluto = Pluto.Decode(data); var type = pluto.GetType(); if (type == typeof(LoginPluto)) { HandleLogin(client, pluto); } else if (type == typeof(MovePluto)) { HandleMove(client, pluto); } else if (type == typeof(RpcCallPluto)) { HandleRPCCall(client, pluto); } else { LoggerHelper.Debug("Unkown type pluto: " + pluto.GetType().ToString()); } }
private void HandleLogin(ClientListener client, Pluto pluto) { client = InitClientData(client, pluto.Arguments[0].ToString()); var eap = new EntityAttachedPluto(); var res = eap.ServerEncode(new BaseAttachedInfo() { typeId = Avatar, id = client.ClientData.Id, dbid = client.ClientData.Dbid, props = new List <EntityPropertyValue>() { new EntityPropertyValue(GetEntityDefPropertyByName("Name"), client.ClientData.Name), } }); client.Send(res); //AOINew(client); //AOIEntityies(client); LoggerHelper.Debug("Client Login: " + pluto.Arguments[0]); }
private void AOIEntityies(ClientListener client) { var pluto = new AOIEntitiesPluto(); var list = new List <CellAttachedInfo>(); for (int i = 0; i < client.ClientData.BelongRoom.MemberList.Count; i++) { var c = client.ClientData.BelongRoom.MemberList[i]; if (c != client) { list.Add(GetCellData(c, isNewCell: true, needName: true)); } } if (list.Count == 0) { return; } var res = pluto.ServerEncode(list); //LoggerHelper.Debug("tempList.Count: " + tempList.Count + " list.Count: " + list.Count + " res: " + res.Length); client.Send(res); }
private void UpdatePos(ClientListener client) { GetCellData(client, false); PosSync(client); }
public void StartBattle(ClientListener client, Pluto pluto) { AOIRPC(client, pluto); }
private ClientListener InitClientData(ClientListener client, string name) { client.ClientData.Name = name; return(client); }
public void RemoveClient(ClientListener client) { m_teamMemberDic[client.ClientData.TeamId].Remove(client); m_memberList.Remove(client); m_currentHeadQuarter--; }