void Update() { //if (!connected) //如果与服务器断开了,就需要再连接一下 // peer.Connect(serverAddress, applicationName); if (peer == null) { return; } peer.Service(); //获取服务器的响应,需要每时每刻都获取,保持连接状态 if (Input.GetKeyDown(KeyCode.Space)) { Debug.LogError("send!!!"); // parameter 0对应id,1对应数据 var parameter = new Dictionary <byte, object>(); var data = new C_Login_Login_0x0101 { _accountName = "1", _password = "******" }; parameter.Add(0, data.GetMessageID()); var temp = Singleton._serializer.Serialize <C_Login_Login_0x0101>(data); parameter.Add(1, temp); peer.OpCustom(0, parameter, true); } }
void OnLogin(Client peer, C_Login_Login_0x0101 msg) { Singleton._log.InfoFormat("[{0}] 帐号 {1} 登录!", msg.GetMessageID().ToHex() , (msg == null ? "null" : msg._accountName)); var rs = Singleton._sqlServer.CheckAccount(msg._accountName, msg._password); ELoginResult newRs = ELoginResult.Failed_AccountNotExist; switch (rs) { case Sql.EAccountResult.AccountNotExist: newRs = ELoginResult.Failed_AccountNotExist; break; case Sql.EAccountResult.PasswordNotCorrect: newRs = ELoginResult.Failed_Unknown; break; case Sql.EAccountResult.Success: newRs = ELoginResult.Success; break; } if (newRs == ELoginResult.Success) { if (Singleton._clients.ContainsKey(msg._accountName)) { // 如果同名则踢出前面登录客户端 var client = Singleton._clients[msg._accountName]; // 在Disconnect中会移除这个名字 Singleton._log.Info("connectId = " + peer.ConnectionId + ", 移除 " + msg._accountName); Singleton._clients.Remove(msg._accountName); client.Disconnect(); } Singleton._log.Info("connectId = " + peer.ConnectionId + ", 添加 " + msg._accountName); Singleton._clients[msg._accountName] = peer; peer._accountName = msg._accountName; // 登录赠送金币1, 每天只限一次 var p = Singleton._sqlServer.GetPlayerData(msg._accountName); // 设置登录时间 p._lastLoginTime = Singleton._timeUtil.DateTimeToStamp(System.DateTime.Now); var time = Singleton._timeUtil.StampToDateTime(p._lastObtainGoldTime); var now = System.DateTime.Now; Singleton._log.Info("now=" + now + ", last=" + time); if (Singleton._timeUtil.GetTimeGap(now, time) >= 24 * 3600 || // 如果时间间隔超过24小时 (time.Day - now.Day > 0)) // 或者在24小时以内但不在同一天登录的 { p._lastObtainGoldTime = Singleton._timeUtil.DateTimeToStamp(System.DateTime.Now); Singleton._log.Info("增加金币数1!"); var a = Singleton._sqlServer.GetAssetData(msg._accountName); a._gold += 1; Singleton._sqlServer.ChangeAsset(a); } Singleton._sqlServer.SavePlayer(p); } // 返回数据 Send(peer, new S_Login_Login_0x0101 { _rs = newRs }); // 测试 // System.Threading.Thread.Sleep(3000); // peer.Disconnect(); // SendFromServer(peer, new S_Item_Gift_0x0401{ _itemId = 1, _count = 10}); }