You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

153 lines
4.2 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Security.Cryptography;
namespace SogClient
{
public class TestWorkThread
{
private Player[] m_players;
private long m_lastStartTime;
private long m_lastStatTime;
// 初始化后的
private int m_playerNumAlloc = 0;
private int m_threadSerial;
private int m_playerCount;
private bool m_loginOver = false;
private Thread m_thread;
private bool m_Over = false;
private ConnectedClientSessionUpdate m_sessionUpdate = new ConnectedClientSessionUpdate();
public void Init(int threadSerial, int count)
{
m_threadSerial = threadSerial + 1;
m_playerCount = count;
m_players = new Player[m_playerCount];
}
public void StartThread(bool useThead)
{
if (useThead)
{
m_thread = new Thread(this.TheadRunFun);
m_thread.Start();
}
else
{
TheadRunFun();
}
}
private void TheadRunFun()
{
while (true)
{
Update();
Thread.Sleep(1);
}
}
public static string GetMd5(string text)
{
StringBuilder sb = new StringBuilder();
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(text));
int length = data.Length;
for (int i = 0; i < length; i++)
{
sb.Append(data[i].ToString("x2"));
}
return (sb.ToString());
}
}
private void StartSomePlayer()
{
if(!m_loginOver && m_playerNumAlloc >= m_playerCount)
{
m_loginOver = true;
}
if (m_playerNumAlloc >= m_playerCount)
{
return;
}
long nowSecond = TimeUtils.GetTimeSecond();
//if (nowSecond - m_lastStartTime < 1)
//{
// return;
//}
//TraceLog.Debug("{0}号线程 -----------------m_playerNumAlloc={1}-----------------", m_threadSerial, m_playerNumAlloc);
m_lastStartTime = nowSecond;
int accountType = Config.AccountType;
string accountIDPre = Config.ClientTestConfig.playerAccountIDPre;
int count = 0;
for (int i = m_playerNumAlloc; i < m_playerCount; i++)
{
string accountID = accountIDPre + "_" + m_threadSerial.ToString() + "_" + i.ToString() + "_" + "@Guest";
//string accountID = GetMd5(accountIDStr) + "@Guest";
string token = GuestCrypto.GetAccountToken(accountID);
m_players[i] = new Player(accountType, accountID, token, m_sessionUpdate, i, m_threadSerial);
m_players[i].Start();
count++;
m_playerNumAlloc++;
if (count >= 5)
{
break;
}
}
}
private void Update()
{
StartSomePlayer();
long nowMs = TimeUtils.GetTime();
int inGameNum = 0;
for(int i = 0; i < m_playerNumAlloc; i++)
{
Player player = m_players[i];
if (player != null)
{
player.Update(nowMs);
if(player.State == PlayerState.PlayerState_InGame )
{
inGameNum++;
}
}
}
if(nowMs - m_lastStatTime > 5000)
{
m_lastStatTime = nowMs;
string msg = string.Format("{0} thread,player num {1}, in game {2}", m_threadSerial, m_playerCount, inGameNum);
Console.WriteLine(msg);
TraceLog.Debug(msg);
}
//统一select
m_sessionUpdate.Update();
}
}
}