static void Main(string[] args) { ServNet serv = ServNet.getInstance(); serv.Start("192.168.50.31", 1234); Console.ReadLine(); }
//踢下线 public static bool KickOff(string id, ProtocolBase protocol) { Conn[] conns = ServNet.getInstance().conns; for (int i = 0; i < conns.Length; i++) { if (conns[i] == null) { continue; } if (!conns[i].isUse) { continue; } if (conns[i].player == null) { continue; } if (conns[i].player.id == id) { lock (conns[i].player) { if (protocol != null) { conns[i].player.Send(protocol); } return(conns[i].player.Logout()); } } } return(true); }
//发送 public void Send(ProtocolBase proto) { if (conn == null) { return; } ServNet.getInstance().Send(conn, proto); }
//下线 public bool Logout() { //事件处理 //ServNet.getInstance().handlePlayerEvent.OnLogout(this); //保存 if (!DataMgr.instance.SavePlayer(this)) { return(false); } //下线 ServNet.getInstance().HandlePlayerEvent.OnLogout(this); conn.player = null; conn.Close(); return(true); }
//删除玩家 public void DelPlayer(string id) { lock (list) { ScenePlayer p = GetScenePlayer(id); if (p != null) { list.Remove(p); } } ProtocolBytes protocol = new ProtocolBytes(); protocol.AddString("PlayerLeave"); protocol.AddString(id); ServNet.getInstance().Broadcast(protocol); }
//创建房间 public bool CreateRoom(Player player) { if (player.tempData.state == PlayerTempData.State.None) { Room room = new Room(player); room.state = Room.State.Readying; room.AddPlayer(player); lock (roomList){ roomList.Add(room); } ServNet.getInstance().Broadcast(GetRoomList()); return(true); } return(false); }
public void MsgLogin(Conn conn, ProtocolBase protocolBase) { int start = 0; ProtocolBytes protocolBytes = (ProtocolBytes)protocolBase; string name = protocolBytes.GetString(start, ref start); string id = protocolBytes.GetString(start, ref start); string pw = protocolBytes.GetString(start, ref start); Console.WriteLine("[登入协议]" + "用户名:" + id + "密码:" + pw); protocolBytes = new ProtocolBytes(); protocolBytes.AddString("Login"); //验证 if (!DataMgr.instance.CheckPassWord(id, pw)) { protocolBytes.AddInt(-1); conn.Send(protocolBytes); return; } //是否已经登入,如果已登入,强制退出,并且此次登入失效 ProtocolBytes protocolLogout = new ProtocolBytes(); protocolLogout.AddString("Logout"); if (!Player.KickOff(id, protocolLogout)) { protocolBytes.AddInt(-1); conn.Send(protocolBytes); return; } //获取玩家数据 PlayerData playerData = DataMgr.instance.GetPlayerData(id); if (playerData == null) { protocolBytes.AddInt(-1); conn.Send(protocolBytes); return; } conn.player = new Player(id, conn); conn.player.data = playerData; //事件触发 ServNet.getInstance().HandlePlayerEvent.OnLogin(conn.player); protocolBytes.AddInt(0); conn.Send(protocolBytes); return; }
public void MsgUpdateRot(Player player, ProtocolBase protocol) { int start = 0; ProtocolBytes proto = (ProtocolBytes)protocol; string name = proto.GetString(start, ref start); float x = proto.GetFloat(start, ref start); float y = proto.GetFloat(start, ref start); float z = proto.GetFloat(start, ref start); float w = proto.GetFloat(start, ref start); //广播 ProtocolBytes protocolRet = new ProtocolBytes(); protocolRet.AddString("UpdateRot"); protocolRet.AddString(player.id); protocolRet.AddFloat(x); protocolRet.AddFloat(y); protocolRet.AddFloat(z); protocolRet.AddFloat(w); ServNet.getInstance().Broadcast(protocolRet); }
//更新信息 public void MsgUpdateInfo(Player player, ProtocolBase protocol) { int start = 0; ProtocolBytes proto = (ProtocolBytes)protocol; string name = proto.GetString(start, ref start); float x = proto.GetFloat(start, ref start); float y = proto.GetFloat(start, ref start); float z = proto.GetFloat(start, ref start); int score = player.data.score; Scene.instance.UpdateInfo(player.id, x, y, z, score); //广播 ProtocolBytes protocolRet = new ProtocolBytes(); protocolRet.AddString("UpdateInfo"); protocolRet.AddString(player.id); protocolRet.AddFloat(x); protocolRet.AddFloat(y); protocolRet.AddFloat(z); protocolRet.AddInt(score); ServNet.getInstance().Broadcast(protocolRet); }
public void MsgKeyUp(Player player, ProtocolBase protocol) { ServNet.getInstance().Broadcast(protocol); }
//发送协议 public void Send(ProtocolBase protocol) { ServNet.getInstance().Send(this, protocol); }