private void Kick(NetworkCommandArgs args) { string pkg = String.Empty; try { BetterNetworkUser player = UserList.getUserFromName(args.Parameters[0]); NetworkTools.kick(player.networkPlayer, args.Parameters[1]); pkg = $"Successfully kicked player {player.name}, reason: {args.Parameters[1]}"; } catch (Exception ex) { pkg = ex.Message; } args.sender.SendBytes(Encoding.UTF8.GetBytes(pkg)); }
public void TestCredentialMapping_Deserialization() { Uri uri = new Uri("https://zzz.blob.core.windows.net/"); var fileText = NetworkTools.DownloadTextFile(uri); var repo = NetworkTools.DeserializeJson <CompositeDeviceConfiguration>(fileText); Assert.IsNotNull(repo, "Should not be null"); Assert.AreEqual(2, repo.Devices.Count, "Mismated # of mappings"); var compare1 = SameDevice(repo.Devices[0], "deviceidt001", "zzz", "localdevice001"); Assert.IsTrue(compare1, "Device 1 mismatch"); var compare2 = SameDevice(repo.Devices[1], "deviceidt002", "zzz", "localdevice002"); Assert.IsTrue(compare2, "Device 2 mismatch"); }
public override void Open() { gunTxt.Clear(); gunIm.Clear(); base.Open(); foreach (var item in playerDic.Keys) { Destroy(playerDic[item]); } playerDic.Clear(); foreach (var item in RoomSingle.GetInfos().Keys) { if (NetworkTools.GetLocalIP().Equals(item)) { continue;//忽略自己 } GameObject obj = Instantiate <GameObject>(playerPrefab, playerParent.transform); obj.SetActive(true); obj.transform.localScale = Vector3.one; BattlePlayerUI bpui = obj.GetComponent <BattlePlayerUI>(); bpui.UpdatePanel(item, 1, 1);//初始让其满血 playerDic.Add(item, bpui); } gunIm.Add(RoomSingle.GetInfos()[NetworkTools.GetLocalIP()].gun1ID, gun1Image); gunIm.Add(RoomSingle.GetInfos()[NetworkTools.GetLocalIP()].gun2ID, gun2Image); gunTxt.Add(RoomSingle.GetInfos()[NetworkTools.GetLocalIP()].gun1ID, gun1Text); gunTxt.Add(RoomSingle.GetInfos()[NetworkTools.GetLocalIP()].gun2ID, gun2Text); gun1Image.sprite = Resources.Load <Sprite>("UI/WeaponIcon/Gun" + RoomSingle.GetInfos()[NetworkTools.GetLocalIP()].gun1ID); gun2Image.sprite = Resources.Load <Sprite>("UI/WeaponIcon/Gun" + RoomSingle.GetInfos()[NetworkTools.GetLocalIP()].gun2ID); GunRow g1Row = GunModel_S.Instance.GetGunInfo(RoomSingle.GetInfos()[NetworkTools.GetLocalIP()].gun1ID); UpdateGunMessage(RoomSingle.GetInfos()[NetworkTools.GetLocalIP()].gun1ID, g1Row.Cartridge, g1Row.CarryCap); GunRow g2Row = GunModel_S.Instance.GetGunInfo(RoomSingle.GetInfos()[NetworkTools.GetLocalIP()].gun2ID); UpdateGunMessage(RoomSingle.GetInfos()[NetworkTools.GetLocalIP()].gun2ID, g2Row.Cartridge, g2Row.CarryCap); hpImage.fillAmount = 1; gun1Use.SetActive(true); gun2Use.SetActive(false); EventCenterManager._Instance.AddListener(EventType.UpdatePlayerUI, UpdatePlayerMsgCallBack); EventCenterManager._Instance.AddListener(EventType.UpdateBattleGunUI, UpdateGunMsgCallBack); EventCenterManager._Instance.AddListener(EventType.SwitchGun, SwitchGunCallBack); EventCenterManager._Instance.AddListener(EventType.OpenAimed, OpenAniedCallBack); }
public async Task <string> GetLocalIp() { Log.Info("开始获取当前网络环境外网IP..."); List <LocalIpApiListItem> localIpApiList = ConfigManager.Now.LocalIpApiList; if (localIpApiList == null || localIpApiList.Count == 0) { throw new Exception("获取外网IP接口不存在,请先添加获取IP接口。"); } if (!await NetworkTools.NetworkCheck()) { throw new Exception("当前网络故障,无法连接互联网。"); } string ipAddress = null; foreach (var item in localIpApiList) { try { (bool, string)result = await ReuqestApi(item); if (result.Item1) { ipAddress = result.Item2; if (!string.IsNullOrEmpty(ipAddress)) { Log.Info($"通过接口【{item.Url}】获取IP地址成功,IP地址:{ipAddress}。"); break; } } else { Log.Warn(result.Item2); } } catch (Exception ex) { Log.Warn($"请求接口:{item.Url}失败,错误:{ex.Message}"); } } if (string.IsNullOrEmpty(ipAddress)) { throw new Exception("获取当前网络外网IP失败。"); } return(ipAddress); }
public TrainSet extractBatch(int size) { if (size > 0 && size <= this.size()) { TrainSet set = new TrainSet(INPUT_SIZE, OUTPUT_SIZE); int[] ids = NetworkTools.randomValues(0, this.size() - 1, size); foreach (int i in ids) { set.addData(this.getInput(i), this.getOutput(i)); } return(set); } else { return(this); } }
/// <summary> /// Used to generate tokens or verify the validity of tokens /// </summary> /// <returns>Validation results</returns> public async Task <InitResultType> InitAsync() { InitResultType result = InitResultType.Success; if (string.IsNullOrEmpty(Token)) { var token = await NetworkTools.GetClientCredentialsToken(_clientId, _clientSecret, _permissions, (msg) => { var args = new ExceptionEventArgs(msg); OnException?.Invoke(this, args); }); if (token.IsError) { if (token.ErrorType == IdentityModel.Client.ResponseErrorType.Http) { result = InitResultType.HttpError; } else { result = InitResultType.InvalidParameters; } } else { Token = token.AccessToken; result = InitResultType.Success; } } else { string testRoute = "basic/earthStatus"; await NetworkTools.GetEntityAsync <EarthStatus>(testRoute, Token, (msg) => { if (msg.Code == 601) { result = InitResultType.HttpError; } else { result = InitResultType.TokenExpiry; } }); } return(result); }
public void Start() { StartCoroutine(fixFrameRate()); PlayerSettings.id = "Server"; PlayerSettings.status = 21; if (Epoch.serverTime == -1) { Epoch.serverTime = (int)0; //(SteamUtils.GetServerRealTime() - 1401854099); } ServerSettings.map = 1; ServerSettings.name = "Unturned Server"; ServerSettings.dedicated = true; NetworkTools.host(32, 25444, string.Empty); }
void UpdatePlayerMessage(string ip, float max, float current) { if (NetworkTools.GetLocalIP().Equals(ip)) { float temp = current / max; if (temp < hpImage.fillAmount) { hurtTipAnim.SetTrigger("Hurt"); } hpImage.fillAmount = temp; return; } if (playerDic.ContainsKey(ip)) { playerDic[ip].UpdatePanel(ip, max, current); } }
/// <summary> /// Get orders from Warframe Market. the query code can get from Sale Dictionary. /// </summary> /// <param name="option">Query paramters</param> /// <returns></returns> public async Task <OrderQueryResult> GetWarframeMarketOrdersAsync(WarframeMarketOrderQueryOption option) { if (string.IsNullOrEmpty(option.Code)) { throw new ArgumentNullException("The item code must be valid."); } string route = Statics.WM_ORDER_QUERY_URL + $"{option.Code}?platform={Platform}&pageSize={option.PageSize}" + $"&page={option.Page}&type={option.Type.ToString().ToLower()}&status={string.Join("&status=", option.OrderStatus.Select(p => p.ToString().ToLower()))}" + $"&minPrice={option.MinPrice}&maxPrice={option.MaxPrice}"; if (option.ModRank > 0) { route += $"&rank={option.ModRank}"; } var orders = await NetworkTools.GetEntityAsync <OrderQueryResult>(route, Token, ExceptionAction); return(orders); }
public void tellAllLife(int setHealth, int setFood, int setWater, int setSickness, bool setBleeding, bool setBones, NetworkMessageInfo info) { if (Network.player != info.sender) { NetworkUser user = NetworkUserList.getUserFromPlayer(info.sender); Logger.LogSecurity(user.id, user.name, "Player sets his own stats. health, food, water, sickness, bleeding, bones..."); if (info.sender != null) { NetworkTools.kick(info.sender, "Switch off your cheat! Incident reported!"); return; } } if (info.sender.ToString() == "0" || info.sender.ToString() == "-1") { this.tellAllLife_Pizza(setHealth, setFood, setWater, setSickness, setBleeding, setBones); } }
/// <summary> /// Get lastest orders from Warframe Market. If you need special order type, please set the orderType paramter /// </summary> /// <param name="orderType">Order type</param> /// <returns></returns> public async Task <List <Order> > GetWarframeMarketLastestOrdersAsync(OrderType?orderType = null) { string route = Statics.WM_LASTEST_ORDERS_URL + $"?platform={Platform}"; var orders = new List <Order>(); if (orderType != null) { route += $"&type={orderType.ToString().ToLower()}"; orders = await NetworkTools.GetEntityAsync <List <Order> >(route, Token, ExceptionAction); } else { var data = await NetworkTools.GetEntityAsync <RecentOrders>(route, Token, ExceptionAction); orders = orders.Union(data.Sell).Union(data.Buy).ToList(); } return(orders); }
public void Awake() { if (NetworkTools.GetLocalIP().Equals(RoomSingle.roomIP)) { Destroy(gameObject); return; } base.BaseAwake(); if (NetworkTools.GetLocalIP().Equals(RoomSingle.roomIP)) { Destroy(this); return; } net = GetComponent <NetBoss>(); NetworkManager._Instance.AddCallBack(70, GetNetworkMsgCallBack); NetworkManager._Instance.AddCallBack(71, GetNetworkMsgCallBack); NetworkManager._Instance.AddCallBack(72, GetNetworkMsgCallBack); }
void Awake() { Instance = this; UIManager._Instance.OpenWindow(WindowName.Battle); GameObject player = GameObject.FindGameObjectWithTag("Player"); playerDic.Add(NetworkTools.GetLocalIP(), player.GetComponent <PlayerBase>()); foreach (string item in RoomSingle.GetInfos().Keys) { if (!item.Equals(NetworkTools.GetLocalIP())) { PlayerInfoMessage m = RoomSingle.GetInfos()[item]; InstancePlayerAI(item, m.ID, m.gun1ID, m.gun2ID); } } Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; }
public void antinoclip() { if (base.transform.position.y < Ground.height(base.transform.position) - 1f) { Transform vector3 = base.transform; float single = base.transform.position.x; Vector3 vector31 = base.transform.position; vector3.position = new Vector3(single, Ground.height(base.transform.position) + 5f, vector31.z); NetworkTools.kick(base.networkView.owner, string.Concat("Kicking ", base.name, " for noclip.")); } else if (base.transform.position.y < Ocean.level - 3f) { Transform transforms = base.transform; float single1 = base.transform.position.x; Vector3 vector32 = base.transform.position; transforms.position = new Vector3(single1, Ocean.level + 5f, vector32.z); NetworkTools.kick(base.networkView.owner, string.Concat("Kicking ", base.name, " for noclip.")); } }
public void OnFailedToConnect(NetworkConnectionError data) { string lower = data.ToString().ToLower(); if (lower == "toomanyconnectedplayers") { NetworkEvents.triggerOnFailed(2); } else if (lower != "invalidpassword") { NetworkEvents.triggerOnFailed(0); } else { NetworkEvents.triggerOnFailed(1); } NetworkTools.disconnect(); }
public void tellState(int map, bool pvp, bool save, string version, int time, int seconds, int mode) { Network.isMessageQueueRunning = false; if (ServerSettings.version != version || mode == 3 && PlayerSettings.status != 21) { NetworkChat.notification = "Sorry: Version Mismatch"; NetworkTools.disconnect(); } else { ServerSettings.map = map; ServerSettings.pvp = pvp; ServerSettings.time = time; NetworkLoader.epoch = seconds; ServerSettings.mode = mode; AudioListener.volume = 0f; UnityEngine.Object.Destroy(GameObject.Find("menu")); NetworkLoader.load = Application.LoadLevelAsync(Maps.getFile(map)); } }
public static bool SendUDPStringASCIIHostname(string hostname, int port, string send) { try { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); byte[] data = Encoding.ASCII.GetBytes(send); IPEndPoint[] endPoints = NetworkTools.GetIPEndPointFromHostName(hostname, port); for (int i = 0; i < endPoints.Length; i++) { socket.SendTo(data, endPoints[i]); } } catch (Exception ex) { Debug.LogException(ex); return(false); } return(true); }
public void Awake() { if (base.networkView.owner != Network.player) { NetworkUser user = NetworkUserList.getUserFromPlayer(base.networkView.owner); Logger.LogSecurity(user.id, user.name, "AI spawn.."); Network.DestroyPlayerObjects(base.networkView.owner); Network.Destroy(base.networkView.viewID); NetworkTools.kick(base.networkView.owner, "VAC: AI control hack detected. Issue reported!"); GameObject.Destroy(gameObject); return; } base.transform.parent = SpawnAnimals.model.transform.FindChild("models"); this.anim = base.transform.FindChild("model").GetComponent <Animifier>(); }
// Use this for initialization void Awake() { if (isTest) { NetworkManager._Instance.StartBattleServer(ips); return; } //判断自己是不是房主 if (RoomSingle.roomIP.Equals(NetworkTools.GetLocalIP())) { Debug.Log("启动战斗服务器"); ips = new string[RoomSingle.GetInfos().Count]; int i = 0; foreach (var item in RoomSingle.GetInfos().Keys) { ips[i] = item; i++; } NetworkManager._Instance.StartBattleServer(ips); } }
public void Awake() { if (base.networkView.owner != Network.player) { // Killing vehicle inmediatly NetworkUser user = NetworkUserList.getUserFromPlayer(networkView.owner); Logger.LogSecurity(user.id, user.name, "Spawned a car instance..."); NetworkTools.kick(base.networkView.owner, "VAC: Vehicle spawn hack detected. Incident reported!"); Network.RemoveRPCs(base.networkView.viewID); Network.Destroy(gameObject); return; } this.real = SpawnVehicles.model.transform.FindChild("models").childCount < Loot.getCars(); if (this.real) { this.position = base.transform.position; this.rotation = base.transform.rotation; this.passengers = new Passenger[base.transform.FindChild("seats").childCount]; this.frontLeft = base.transform.FindChild("wheels").FindChild("wheelFrontLeft").GetComponent <WheelCollider>(); this.backLeft = base.transform.FindChild("wheels").FindChild("wheelBackLeft").GetComponent <WheelCollider>(); this.frontRight = base.transform.FindChild("wheels").FindChild("wheelFrontRight").GetComponent <WheelCollider>(); this.backRight = base.transform.FindChild("wheels").FindChild("wheelBackRight").GetComponent <WheelCollider>(); this.left0 = base.transform.FindChild("wheels").FindChild("wheel0Left"); this.left1 = base.transform.FindChild("wheels").FindChild("wheel1Left"); this.right0 = base.transform.FindChild("wheels").FindChild("wheel0Right"); this.right1 = base.transform.FindChild("wheels").FindChild("wheel1Right"); this.steerer = base.transform.FindChild("steerer"); if (Network.isServer) { base.networkView.RPC("tellHealth", RPCMode.All, new object[] { this.health }); base.networkView.RPC("tellFuel", RPCMode.All, new object[] { this.fuel }); base.rigidbody.useGravity = true; base.rigidbody.isKinematic = false; this.stop(); NetworkEvents.onPlayerDisconnected += new NetworkPlayerDelegate(this.onPlayerDisconnected); } } }
private void CalculateActualSpeed(object sender, ElapsedEventArgs args) { ThreadPool.QueueUserWorkItem(callback => { long beginValue = Interface.GetIPv4Statistics().BytesReceived; DateTime beginTime = DateTime.Now; Thread.Sleep(500); long endValue = Interface.GetIPv4Statistics().BytesReceived; DateTime endTime = DateTime.Now; long recievedBytes = endValue - beginValue; double totalSeconds = (endTime - beginTime).TotalSeconds; lock (lockObj) { ActualSpeedInBytes = Math.Round((double)(recievedBytes / totalSeconds), 1); ActualSpeed = NetworkTools.BytesConvert((double)(recievedBytes / totalSeconds)) + "/s"; } }); }
public void equipServer(int slotX, int slotY, int itemId) { Inventory inventory = base.GetComponent <Inventory>(); if ((slotX != -1 || itemId != -1) && inventory.items[slotX, slotY].id != itemId) // WTF? { NetworkTools.kick(base.networkView.owner, string.Concat("Kicking ", base.name, " for hacking items.")); } else { Useable useable = base.GetComponent <Useable>(); if (useable != null) { UnityEngine.Object.Destroy(useable); } if (itemId != -1) { GameObject gameObject = (GameObject)Resources.Load(string.Concat("Prefabs/Viewmodels/", itemId)); base.gameObject.AddComponent(gameObject.GetComponent <Useable>().GetType()); } } }
private void OnDataReceived(IAsyncResult ar) { IPEndPoint mEndPoint = new IPEndPoint(IPAddress.Any, mPort); byte[] request = mListener.EndReceive(ar, ref mEndPoint); string mRequest = Encoding.UTF8.GetString(request); JsonObject incoming = JsonObject.Parse(mRequest); if (incoming.Get("context").Contains("discovery")) { List <string> addresses = NetworkTools.GetPrivateAddressList(); IPAddress clientAddress = IPAddress.Parse(incoming.Get("address")); string interfaceAddress = String.Empty; foreach (string address in addresses) { IPAddress ifAddress = IPAddress.Parse(address); IPAddress subnetMask = NetworkTools.GetSubnetMask(address); IPAddress firstNetwork = NetworkTools.GetNetworkAddress(ifAddress, subnetMask); IPAddress secondNetwork = NetworkTools.GetNetworkAddress(clientAddress, subnetMask); if (!firstNetwork.Equals(secondNetwork)) { continue; } interfaceAddress = ifAddress.ToString(); break; } Dictionary <string, object> notify = new Dictionary <string, object>(); notify.Add("context", "notify"); notify.Add("address", interfaceAddress); notify.Add("name", Environment.GetEnvironmentVariable("COMPUTERNAME")); notify.Add("port", UserSettings.Instance.ListeningPort); byte[] response = Encoding.UTF8.GetBytes(JsonSerializer.SerializeToString(notify)); mListener.Send(response, response.Length, mEndPoint); } mListener.BeginReceive(OnDataReceived, null); }
void Update() { if (shutdownRequested) { Console.WriteLine("Memory owerflow. Shutdown initiated"); NetworkChat.sendAlert("Restarting the server... (takes max 20sec)"); // Offing network Network.SetSendingEnabled(0, false); Network.isMessageQueueRunning = false; NetworkTools.save(); Application.Quit(); } if (shouldSave) { shouldSave = false; Console.WriteLine("Saving world"); // FIXME: temporary disabled saving... This causes the awaiting players bug //NetworkTools.save(); } }
// Checks the ingame world public static bool CheckPlayer(NetworkPlayer player, string reference) { try { if (player == null) { throw new UnityException(); } if (player.ipAddress == null || player.guid == null) { throw new UnityException(); } //if (NetworkUserList.getUserFromPlayer(player) == null) // throw new UnityException("Player not found but conenction exists. Dropping!"); } catch { Debug.LogError("Kicked no-network player! " + reference); NetworkTools.kick(player, "No network connection... Kicking..."); return(false); } return(true); }
public void tellPosition(Vector3 setPosition, NetworkMessageInfo info) { if (info.sender == base.networkView.owner) { if (!Network.isServer || !(base.tag == "Player") && !(base.tag == "Enemy") || !(this.lastTele != Vector3.zero) || this.timeTele == 0f || !(base.transform.parent != null) || !(base.transform.parent.name == "models")) { this.passedDistance = 0f; this.passedHeight = 0f; this.timeBuffer = 0f; } else { NetworkInterpolation networkInterpolation = this; networkInterpolation.passedDistance = networkInterpolation.passedDistance + Mathf.Sqrt(Mathf.Pow(setPosition.x - this.lastTele.x, 2f) + Mathf.Pow(setPosition.z - this.lastTele.z, 2f)); NetworkInterpolation networkInterpolation1 = this; networkInterpolation1.passedHeight = networkInterpolation1.passedHeight + (setPosition.y - this.lastTele.y); NetworkInterpolation networkInterpolation2 = this; networkInterpolation2.timeBuffer = networkInterpolation2.timeBuffer + (Time.realtimeSinceStartup - this.timeTele); if (this.timeBuffer > 3f) { if (this.passedDistance / this.timeBuffer > 13f || this.passedHeight / this.timeBuffer < -12f || this.passedHeight / this.timeBuffer > 5f) { NetworkTools.kick(base.networkView.owner, string.Concat("Kicking ", base.name, " for suspected teleport.")); } else { this.passedDistance = 0f; this.passedHeight = 0f; this.timeBuffer = 0f; } } } this.lastTele = setPosition; this.timeTele = Time.realtimeSinceStartup; this.position = setPosition; } }
protected override void GetNetworkMsgCallBack(params object[] obj_arr) { NetworkMessage message = (NetworkMessage)obj_arr[0]; if (message.type == 70) { EnemyInfoMessage info = EnemyInfoMessage.GetMessage(message.message); net.SetTarget(info); } else { if (message.type == 72) { if (!message.ip.Equals(NetworkTools.GetLocalIP())) { AddMessage(message); } } else { AddMessage(message); } } }
private void FillIPTextBoxes() { #if DEBUG this.textBoxIPFrom.Text = "192.168.178.1"; this.textBoxIPTo.Text = "192.168.178.254"; #else var myIp = NetworkTools.GetLocalIPAddress(AddressFamily.InterNetwork); if (myIp == null || myIp == IPAddress.None) { return; } var myIPStr = myIp.ToString(); var strArr = myIPStr.Split('.'); strArr[3] = "1"; var ipFrom = string.Join(".", strArr); this.textBoxIPFrom.Text = ipFrom; strArr[3] = "254"; var ipTo = string.Join(".", strArr); this.textBoxIPTo.Text = ipTo; #endif }
private void InitUI() { string ipFromStr = null; string ipToStr = null; Dispatcher.Invoke((Action)(() => ipFromStr = this.textBoxIPFrom.Text)); Dispatcher.Invoke((Action)(() => ipToStr = this.textBoxIPTo.Text)); if (!NetworkTools.IsStringIPAddress(ipFromStr)) { MessageBox.Show(Wsapm.Resources.Wsapm.NetworkMachineChoiceWindow_MessageIPFromNoRealIP, Wsapm.Resources.Wsapm.General_MessageBoxErrorTitle, MessageBoxButton.OK, MessageBoxImage.Error); return; } if (!NetworkTools.IsStringIPAddress(ipToStr)) { MessageBox.Show(Wsapm.Resources.Wsapm.NetworkMachineChoiceWindow_MessageIPToNoRealIP, Wsapm.Resources.Wsapm.General_MessageBoxErrorTitle, MessageBoxButton.OK, MessageBoxImage.Error); return; } var ipFrom = IPAddress.Parse(ipFromStr); var ipTo = IPAddress.Parse(ipToStr); var ipRange = NetworkTools.GetIPAddressRange(ipFrom, ipTo); var machines = NetworkTools.GetNetworkMachinesInLocalNetworkFromIPAddressRange(ipRange, cancellationTokenSource.Token); if (machines == null || machines.Length == 0) { return; } //var machines = DecaTec.Toolkit.Tools.NetworkTools.GetComputersInLocalNetwork(); colView = CollectionViewSource.GetDefaultView(machines); Dispatcher.Invoke((Action)(() => this.networkMachineDataGrid.ItemsSource = colView)); Dispatcher.Invoke((Action)(() => this.networkMachineDataGrid.Items.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)))); }
/// <summary> /// 获取指定日期各时段玩家数。 /// </summary> /// <param name="date"></param> /// <returns></returns> public List <TimePointPlayerNumber> GetPlayerNumbersOfDay(DateTime date) { try { List <TimePointPlayerNumber> ret = new List <TimePointPlayerNumber>(); string _date = date.Year.ToString() + (date.Month.ToString().Length == 2 ? date.Month.ToString() : "0" + date.Month.ToString()) + (date.Day.ToString().Length == 2 ? date.Day.ToString() : "0" + date.Day.ToString()); string playersOnTime = NetworkTools.GetUrlReturn("http://139.199.127.51/Qnum/" + _date + ".txt"); char[] spchar = { '\\', '\\' }; string[] lines = Regex.Split(playersOnTime, "\\\\", RegexOptions.IgnoreCase); foreach (string s in lines) { if (s == "") { continue; } string time = s.Split(':')[0]; string num = s.Split(':')[1]; //*** 判断最接近的时间点并将数据填充到PlayerNumberDuringDay的合适位置 *** //以下算法极为烧脑,请酌情修改 //可联系时间轴帮助理解算法 int year = int.Parse(time.Substring(0, 4)); //取得年 int month = int.Parse(time.Substring(4, 2)); //取得月 int day = int.Parse(time.Substring(6, 2)); //取得日 int hour = int.Parse(time.Substring(8, 2)); //取得小时 int min = int.Parse(time.Substring(10, 2)); //取得分钟 ret.Add(new TimePointPlayerNumber(new DateTime(year, month, day, hour, min, 0), int.Parse(num))); } return(ret); } catch (Exception e) { throw e; } }