public void Start(int port, IRev _revProc, bool singleModel = true) { mRevProc = _revProc; mSingleModel = singleModel; IPAddress ipa = IPAddress.Any; mSocketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint endpoint = new IPEndPoint(ipa, port); mSocketServer.Bind(endpoint); mSocketServer.Listen(param.MAX_LISTEN_NUM); if (mSingleModel) { onMiss(); } else { Thread threadSocket = new Thread(() => { while (true) { Accept(); } }); threadSocket.IsBackground = true; threadSocket.Start(); } }
public connect(Socket _conn, IRev _IServerRev, IRev _IClientRev, IMiss _IMiss = null) { mIServerRev = _IServerRev; mIClientRev = _IClientRev; mIMiss = _IMiss; mConnectNormal = true; mConn = _conn; if (null == _IClientRev && null == mIServerRev) { return; } Thread revThread = new Thread(_OnRev); revThread.IsBackground = true; revThread.Start(); }
public void Start(byte mark, string IP, int prort, IRev revProc) { IPAddress address = IPAddress.Parse(IP); IPEndPoint endpoint = new IPEndPoint(address, prort); Socket so = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); so.Connect(endpoint); byte[] by = new byte[1]; by[0] = mark; so.Send(by, 1, 0); if (null == revProc) { mReceiver = new receiver(); } else { mReceiver = null; } mConnect = new connect(so, null, revProc); }
public void rev(byte[] recvBuf, IRev Fun) { if (mNewMsgMark.isNewMsgMark(recvBuf)) { mRevSize = 0; mRevData.msglen = (int)BitConverter.ToUInt32(recvBuf, param.guidLEN); mRevData.cmd = BitConverter.ToUInt32(recvBuf, param.posCmd); if (mRevData.msglen > mRevData.recvBytes.Length) { mRevData.recvBytes = new byte[mRevData.msglen]; } if (mRevData.msglen <= param.newMsgMaxDataSpace) { Array.Copy(recvBuf, param.posMsg, mRevData.recvBytes, 0, mRevData.msglen); MsgFinish(Fun); } return; } int CpySize = param.socketRevBufSize; if (mRevSize + param.socketRevBufSize > mRevData.msglen) { CpySize = (int)(mRevData.msglen - mRevSize); } Array.Copy(recvBuf, 0, mRevData.recvBytes, mRevSize, CpySize); mRevSize = mRevSize + (uint)CpySize; if (mRevSize != mRevData.msglen) { return; } MsgFinish(Fun); }
void MsgFinish(IRev Fun) { Fun.onRevData(mRevData); mRevData.msglen = 0; mRevSize = 0; }