//获取socket的头包 public static byte[] GetSocketHeadBuff(NetProtocol.NET_GM_PROTPCOL type, Int16 MessageSize) { byte[] headbuff = new byte[NetProtocol.Protocol.ALLST_GENERIC_LEN]; object objhead = NetTools.BytesToStuct(headbuff, typeof(NetProtocol.ALLST_GENERIC)); NetProtocol.ALLST_GENERIC pMsgGeneric = (NetProtocol.ALLST_GENERIC)objhead; pMsgGeneric.dwTimeStamp = 0; pMsgGeneric.wType = (UInt16)type; pMsgGeneric.iMessageLen = MessageSize; pMsgGeneric.iPlayerID = 1001; pMsgGeneric.nError = (Int16)NetProtocol.GAMESERVER_ERROR.ERR_GAMESERVER_SUCCESS; byte[] Readheadbuff = NetTools.GetBytes(pMsgGeneric); return(Readheadbuff); }
//通过clientSocket接收数据 private static void ReciveMsg() { //DynamicBufferManager receiveBuffer = m_asyncSocketUserToken.ReceiveBuffer; byte[] dataBuff = new byte[NetProtocol.ConstVar.RECIVEBUFFSIZE_MAX]; //while (true) { Array.Clear(dataBuff, 0, dataBuff.Length); int receiveLength = clientSocket.Receive(dataBuff, dataBuff.Length, SocketFlags.None); if (receiveLength >= NetProtocol.Protocol.ALLST_GENERIC_LEN) { //接收server 发来的数据 object objhead_1 = NetTools.BytesToStuct(dataBuff, typeof(NetProtocol.ALLST_GENERIC)); NetProtocol.ALLST_GENERIC pMsgGeneric = (NetProtocol.ALLST_GENERIC)objhead_1; // if (pMsgGeneric.iMessageLen + Protocol.ALLST_GENERIC_LEN <= receiveLength) { Dispatch(pMsgGeneric, dataBuff, receiveLength); } } } }
private static void Dispatch(NetProtocol.ALLST_GENERIC pMsgGeneric, byte[] dataBuff, int ReciveSize) { byte[] Msgbuff = new byte[NetProtocol.ConstVar.RECIVEBUFFSIZE_MAX]; Array.Copy(dataBuff, NetProtocol.Protocol.ALLST_GENERIC_LEN, Msgbuff, 0, ReciveSize - NetProtocol.Protocol.ALLST_GENERIC_LEN); switch (pMsgGeneric.wType) { case (UInt16)NetProtocol.NET_GM_PROTPCOL.STOC_CLIENTLOGIN_MSG: { //连接成功 object obj = NetTools.BytesToStuct(Msgbuff, typeof(NetProtocol.STOC_CLIENTLOGIN)); LogonServer("172.22.20.232", "admin", ""); } break; case (UInt16)NetProtocol.NET_GM_PROTPCOL.STOC_INITVIDEO_MSG: { //检测连接视频服务器是否成功 object obj = NetTools.BytesToStuct(Msgbuff, typeof(NetProtocol.STOC_INITVIDEO)); NetProtocol.STOC_INITVIDEO pInfo = (NetProtocol.STOC_INITVIDEO)obj; if (pInfo.Ret > 0) { //连接成功 GetCameraList(); } else { //连接失败 } } break; case (UInt16)NetProtocol.NET_GM_PROTPCOL.STOC_GETVIDEODATA_MSG: { //获取视频数据 object obj = NetTools.BytesToStuct(Msgbuff, typeof(NetProtocol.STOC_VIDEOINFO)); NetProtocol.STOC_VIDEOINFO pInfo = (NetProtocol.STOC_VIDEOINFO)obj; ServerCameraList.Clear(); foreach (NetProtocol.CMS_NodeData data in pInfo.VideoData) { NetProtocol.CAMERAINFO camera = new NetProtocol.CAMERAINFO(); camera.cName = data.cName; camera.hNode = data.hNode; camera.bPTZ = data.bPTZ; camera.nStatus = data.nStatus; ServerCameraList.Add(camera); } foreach (NetProtocol.CMS_NodeData data in pInfo.VideoData) { if (data.nStatus == 1 && data.bPTZ == 0) { hFirOperateCamera = data.hNode; hCurOperateCamera = data.hNode; FirCameraNam = data.cName; CurCameraName = data.cName; break; } } foreach (NetProtocol.CMS_NodeData data in pInfo.VideoData) { if (data.nStatus == 1 && data.bPTZ == 1) { hSecOperateCamera = data.hNode; SecCameraNam = data.cName; break; } } openCamera(hCurOperateCamera, CurCameraName.ToString()); } break; case (UInt16)NetProtocol.NET_GM_PROTPCOL.STOC_OPENCAMERA_MSG: { //打开视频返回的消息(获取当前预览的句柄) object obj = NetTools.BytesToStuct(Msgbuff, typeof(NetProtocol.CTOS_CAMERAINFO)); NetProtocol.CTOS_CAMERAINFO pInfo = (NetProtocol.CTOS_CAMERAINFO)obj; if (pInfo.camerHander != IntPtr.Zero) { // 成功打开 if (hCurOperateCamera != IntPtr.Zero) { SetVideoCallBackFunc(hCurOperateCamera, CurCameraName); } } } break; case (UInt16)NetProtocol.NET_GM_PROTPCOL.STOC_CLOSECAMERA_MSG: { //关闭当前视频 } break; case (UInt16)NetProtocol.NET_GM_PROTPCOL.STOC_SETPREPOSITION_MSG: { //设置预设位返回的消息 } break; case (UInt16)NetProtocol.NET_GM_PROTPCOL.STOC_GOTOPREPOSITION_MSG: { //打开预设位返回的消息 } break; case (UInt16)NetProtocol.NET_GM_PROTPCOL.STOC_LOGINOFFSERVER_MSG: { //关闭服务器返回的消息 } break; case (UInt16)NetProtocol.NET_GM_PROTPCOL.STOC_GETCALLBACKDATA_MSG: { //获取回调数据 object obj = NetTools.BytesToStuct(Msgbuff, typeof(NetProtocol.STOC_CAMERANAME)); NetProtocol.STOC_CAMERANAME pData = (NetProtocol.STOC_CAMERANAME)obj; // Array.Copy(源数据, 源数据开始复制处索引, 接收数据, 接收数据开始处索引, 复制多少个数据); byte[] CompareByte = new byte[NetProtocol.Protocol.STOC_CAMERANAME_LEN]; Array.Copy(pData.pName, 0, CompareByte, 0, pData.size); byte[] CompareFirCameraByte = new byte[NetProtocol.Protocol.STOC_CAMERANAME_LEN]; Array.Copy(FirCameraNam, 0, CompareFirCameraByte, 0, pData.size); byte[] CompareSecCameraByte = new byte[NetProtocol.Protocol.STOC_CAMERANAME_LEN]; Array.Copy(SecCameraNam, 0, CompareSecCameraByte, 0, pData.size); if (NetTools.PasswordEquals(CompareByte, CompareFirCameraByte)) { mIsReadShareMemory = true; } if (NetTools.PasswordEquals(CompareByte, CompareSecCameraByte)) { mSecIsReadShareMemory = true; } //int index = count * NetProtocol.Protocol.STOC_RGB_LEN; //currentBuff += NetProtocol.Protocol.STOC_RGB_LEN; //count++; //Debug.Log("currentBuff =" + currentBuff); //Debug.Log("count =" + count); //txt2dtest.LoadRawTextureData(pData.pRGB); //txt2dtest.Apply(); } break; default: break; } }