本文整理汇总了C#中ClientInfo.CloseFile方法的典型用法代码示例。如果您正苦于以下问题:C# ClientInfo.CloseFile方法的具体用法?C# ClientInfo.CloseFile怎么用?C# ClientInfo.CloseFile使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ClientInfo
的用法示例。
在下文中一共展示了ClientInfo.CloseFile方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ProcCommand
//.........这里部分代码省略.........
break;
case 0x07: // запрос команды ТУ
if (client.UserRoleID == BaseValues.Roles.App && client.CmdList.Count > 0)
{
ModLogic.Command ctrlCmd = client.CmdList[0];
int cmdDataLen = ctrlCmd.CmdData == null ? 0 : ctrlCmd.CmdData.Length;
respDataLen = 7 + cmdDataLen;
outBuf[3] = (byte)(cmdDataLen % 256);
outBuf[4] = (byte)(cmdDataLen / 256);
outBuf[5] = (byte)ctrlCmd.CmdTypeID;
outBuf[6] = (byte)(ctrlCmd.KPNum % 256);
outBuf[7] = (byte)(ctrlCmd.KPNum / 256);
outBuf[8] = (byte)(ctrlCmd.CmdNum % 256);
outBuf[9] = (byte)(ctrlCmd.CmdNum / 256);
if (cmdDataLen > 0)
Array.Copy(ctrlCmd.CmdData, 0, outBuf, 10, cmdDataLen);
// удаление команды ТУ из списка команд клиента
client.CmdList.RemoveAt(0);
}
else
{
respDataLen = 2;
outBuf[3] = 0;
outBuf[4] = 0;
}
break;
case 0x08: // открытие и чтение из файла
int readCnt = 0;
bool readOk = false;
if (client.Authenticated)
{
client.CloseFile();
try { client.Dir = (Dirs)inBuf[3]; }
catch { client.Dir = Dirs.Cur; }
int fileNameLen = inBuf[4];
client.FileName = Encoding.Default.GetString(inBuf, 5, fileNameLen);
string fullFileName = GetFullFileName(client.Dir, client.FileName);
int count = BitConverter.ToUInt16(inBuf, 5 + fileNameLen);
if (settings.DetailedLog)
appLog.WriteAction(string.Format(Localization.UseRussian ?
"Открытие файла {0}" : "Opening file {0}", fullFileName), Log.ActTypes.Action);
try
{
if (File.Exists(fullFileName))
{
client.FileStream = new FileStream(fullFileName,
FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
readCnt = client.FileStream.Read(outBuf, 6, count);
readOk = true;
}
else
{
appLog.WriteAction(string.Format(Localization.UseRussian ?
"Файл {0} не найден." : "File {0} not found.",
client.FullFileNameInfo), Log.ActTypes.Error);
}
}
catch (Exception ex)
{
appLog.WriteAction(string.Format(Localization.UseRussian ?
示例2: Execute
/// <summary>
/// Цикл взаимодействия с клиентами (метод вызывается в отдельном потоке)
/// </summary>
private void Execute()
{
while (!terminated)
{
Monitor.Enter(clients);
ClientInfo client = null;
try
{
// открытие запрашиваемых соединений с клиентами
while (tcpListener.Pending() && !terminated)
{
TcpClient tcpClient = tcpListener.AcceptTcpClient();
tcpClient.NoDelay = true;
tcpClient.SendTimeout = TcpSendTimeout;
tcpClient.ReceiveTimeout = TcpReceiveTimeout;
client = new ClientInfo(tcpClient);
appLog.WriteAction(string.Format(Localization.UseRussian ? "Соединение с клиентом {0}" :
"Connect to client {0}", client.Address), Log.ActTypes.Action);
clients.Add(client);
// подтверждение соединения - отправка версии сервера
client.NetStream.Write(AppVersionBuf, 0, AppVersionBuf.Length);
}
DateTime nowDT = DateTime.Now;
int clientInd = 0;
while (clientInd < clients.Count && !terminated)
{
client = clients[clientInd];
// приём и обработка данных от клиента
if (client.TcpClient.Available > 0)
{
client.ActivityDT = nowDT;
ReceiveData(client);
}
if ((nowDT - client.ActivityDT).TotalSeconds > InactiveTime)
{
// отключение клиента, если он не активен
appLog.WriteAction(string.Format(Localization.UseRussian ? "Отключение клиента {0}" :
"Disconnect client {0}", client.Address), Log.ActTypes.Action);
Disconnect(client.TcpClient, client.NetStream);
client.CloseFile();
clients.RemoveAt(clientInd);
}
else
{
// удаление устаревших команд ТУ из списка команд клиента
int cmdInd = 0;
while (cmdInd < client.CmdList.Count)
{
if ((nowDT - client.CmdList[cmdInd].CreateDT).TotalSeconds > CmdLifeTime)
client.CmdList.RemoveAt(cmdInd);
else
cmdInd++;
}
// переход к следующему клиенту
clientInd++;
}
}
// передача команд ТУ подключенным клиентам
lock (cmdBuf)
{
if (cmdBuf.Count > 0)
{
foreach (ClientInfo cl in clients)
if (cl.UserRoleID == BaseValues.Roles.App)
cl.CmdList.AddRange(cmdBuf);
cmdBuf.Clear();
}
}
}
catch (Exception ex)
{
string s = client == null ?
(Localization.UseRussian ?
"Ошибка при взаимодействии с клиентами" : "Error communicating with clients") :
string.Format(Localization.UseRussian ?
"Ошибка при взаимодействии с клиентом {0}" : "Error communicating with the client {0}",
client.Address);
appLog.WriteAction(s + ": " + ex.Message, Log.ActTypes.Exception);
}
finally
{
Monitor.Exit(clients);
}
Thread.Sleep(10);
}
}