ClassAssistance.Master/NetworkService.cs
(开头部分) 6KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using ClassAssistance.Common;
using ClassAssistance.Common.Network.Protocol;
using NetMQ;
using NetMQ.Sockets;
namespace ClassAssistance.Master
{
/// <summary>
///
/// </summary>
public sealed class NetworkService : Singleton<NetworkService>, IEventListener<SlaveEvent, Slave>
{
public const int SendInterval = 10;
public const int PingInterval = 1000;
public const int PingCountBeforeDisconnection = 5;
public const int ListnenPort = 5556;
private NetMQSocket m_server;
private NetMQPoller m_poller;
private readonly Dictionary<int, Slave> m_slaveById;
private bool m_started;
private readonly ConcurrentQueue<NetMQMessage> m_sendQueue = new ConcurrentQueue<NetMQMessage>();
/// <summary>
///
/// </summary>
public NetworkService()
{
m_slaveById = new Dictionary<int, Slave>();
Slave.SlaveEvents.Subscribe(this);
}
/// <summary>
/// 开启socket并绑定本地端口
/// </summary>
public void Start()
{
m_server = new RouterSocket();
m_server.Bind("tcp://*:" + ListnenPort);
m_server.ReceiveReady += Server_ReceiveReady;
m_server.SendReady += Server_SendReady;
m_started = true;
new Thread(() =>
{
long nextSend = 0, nextHeartBeat = 0;
while (m_started)
{
var tmp = TimeSpan.FromMilliseconds(1);
m_server.Poll(tmp);
if (nextSend <= 0)
{
SendQueue();
nextSend = SendInterval;
}
if (nextHeartBeat <= 0)
后面还有 159 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
