public static void SetVideoCallBackFunc(IntPtr OperateCamera, byte[] CameraName) { Stream str; str = new MemoryStream(); byte[] headBuff = GetSocketHeadBuff(NetProtocol.NET_GM_PROTPCOL.CTOS_GETCALLBACKDATA_MSG, (Int16)NetProtocol.Protocol.CTOS_CAMERAINFO_LEN); byte[] MSG = new byte[NetProtocol.Protocol.CTOS_CAMERAINFO_LEN]; object objMsg = NetTools.BytesToStuct(MSG, typeof(NetProtocol.CTOS_CAMERAINFO)); NetProtocol.CTOS_CAMERAINFO pMsg = (NetProtocol.CTOS_CAMERAINFO)objMsg; pMsg.camerHander = OperateCamera; pMsg.PlayerIndex = 1001; pMsg.cName = CameraName; byte[] ReadMsgbuff = NetTools.GetBytes(pMsg); byte[] PacketBuff = new byte[NetProtocol.Protocol.CTOS_CAMERAINFO_LEN + headBuff.Length]; str.Write(headBuff, 0, headBuff.Length); str.Write(ReadMsgbuff, 0, ReadMsgbuff.Length); str.Position = 0; int r = str.Read(PacketBuff, 0, PacketBuff.Length); if (r > 0) { clientSocket.Send(PacketBuff, PacketBuff.Length, SocketFlags.None); } }
// 关闭当前摄像头 public static void closeCamera() { Stream str; str = new MemoryStream(); byte[] headBuff = GetSocketHeadBuff(NetProtocol.NET_GM_PROTPCOL.CTOS_CLOSECAMERA_MSG, (Int16)NetProtocol.Protocol.CTOS_CAMERAINFO_LEN); byte[] MSG = new byte[NetProtocol.Protocol.CTOS_CAMERAINFO_LEN]; object objMsg = NetTools.BytesToStuct(MSG, typeof(NetProtocol.CTOS_CAMERAINFO)); NetProtocol.CTOS_CAMERAINFO pMsg = (NetProtocol.CTOS_CAMERAINFO)objMsg; pMsg.camerHander = hCurOperateCamera; pMsg.PlayerIndex = 1001; pMsg.cName = CurCameraName; // NetTools.CodeBytes(CurCameraName, 64); byte[] ReadMsgbuff = NetTools.GetBytes(pMsg); byte[] PacketBuff = new byte[NetProtocol.Protocol.CTOS_CAMERAINFO_LEN + headBuff.Length]; str.Write(headBuff, 0, headBuff.Length); str.Write(ReadMsgbuff, 0, ReadMsgbuff.Length); str.Position = 0; int r = str.Read(PacketBuff, 0, PacketBuff.Length); if (r > 0) { clientSocket.Send(PacketBuff, PacketBuff.Length, SocketFlags.None); } }
// 打开预设位 public static void GoToPrePosition(string name, int pos) { Stream str; str = new MemoryStream(); byte[] headBuff = GetSocketHeadBuff(NetProtocol.NET_GM_PROTPCOL.CTOS_GOTOPREPOSITION_MSG, (Int16)NetProtocol.Protocol.PREPOSITIONINFO_LEN); byte[] MSG = new byte[NetProtocol.Protocol.PREPOSITIONINFO_LEN]; object objMsg = NetTools.BytesToStuct(MSG, typeof(NetProtocol.PREPOSITIONINFO)); NetProtocol.PREPOSITIONINFO pMsg = (NetProtocol.PREPOSITIONINFO)objMsg; pMsg.camerHander = hCurOperateCamera; pMsg.cName = NetTools.CodeBytes(name, 64); pMsg.ret = pos; byte[] ReadMsgbuff = NetTools.GetBytes(pMsg); byte[] PacketBuff = new byte[NetProtocol.Protocol.PREPOSITIONINFO_LEN + headBuff.Length]; str.Write(headBuff, 0, headBuff.Length); str.Write(ReadMsgbuff, 0, ReadMsgbuff.Length); str.Position = 0; int r = str.Read(PacketBuff, 0, PacketBuff.Length); if (r > 0) { clientSocket.Send(PacketBuff, PacketBuff.Length, SocketFlags.None); } }
//ip 172.22.20.232 userName admin pwd ""登录服务器 public static void LogonServer(string ip, string userName, string pwd) { Stream str; str = new MemoryStream(); byte[] headBuff = GetSocketHeadBuff(NetProtocol.NET_GM_PROTPCOL.CTOS_INITVIDEO_MSG, (Int16)NetProtocol.Protocol.CTOS_INITVIDEO_LEN); byte[] MSG = new byte[NetProtocol.Protocol.CTOS_INITVIDEO_LEN]; object objMsg = NetTools.BytesToStuct(MSG, typeof(NetProtocol.CMS_LogonInfo)); NetProtocol.CMS_LogonInfo pMsg = (NetProtocol.CMS_LogonInfo)objMsg; pMsg.nStructVersion = 201402170; pMsg.srvIP = NetTools.CodeBytes(ip, 64); pMsg.User = NetTools.CodeBytes(userName, 64); pMsg.Passwd = NetTools.CodeBytes(pwd, 64); pMsg.nProtocol = 1; pMsg.nRelayMode = 0; byte[] ReadMsgbuff = NetTools.GetBytes(pMsg); byte[] PacketBuff = new byte[NetProtocol.Protocol.CTOS_INITVIDEO_LEN + headBuff.Length]; str.Write(headBuff, 0, headBuff.Length); str.Write(ReadMsgbuff, 0, ReadMsgbuff.Length); str.Position = 0; int r = str.Read(PacketBuff, 0, PacketBuff.Length); if (r > 0) { clientSocket.Send(PacketBuff, PacketBuff.Length, SocketFlags.None); } }
//socket 握手通信 private static void LaunchSocket(string Name) { Stream str; str = new MemoryStream(); byte[] headBuff = GetSocketHeadBuff(NetProtocol.NET_GM_PROTPCOL.CTOS_CLIENTLOGIN_MSG, (Int16)NetProtocol.Protocol.CTOS_CLIENTLOGIN_LEN); byte[] Msgbuff = new byte[NetProtocol.Protocol.CTOS_CLIENTLOGIN_LEN]; object objMsg = NetTools.BytesToStuct(Msgbuff, typeof(NetProtocol.CTOS_CLIENTLOGIN)); NetProtocol.CTOS_CLIENTLOGIN pMsg = (NetProtocol.CTOS_CLIENTLOGIN)objMsg; pMsg.PlayerName = NetTools.CodeBytes(Name, NetProtocol.ConstVar.ZZ_NAME_MAX + 3); pMsg.playerUID = 1001; byte[] ReadMsgbuff = NetTools.GetBytes(pMsg); byte[] PacketBuff = new byte[NetProtocol.Protocol.CTOS_CLIENTLOGIN_LEN + headBuff.Length]; str.Write(headBuff, 0, headBuff.Length); str.Write(ReadMsgbuff, 0, ReadMsgbuff.Length); str.Position = 0; int r = str.Read(PacketBuff, 0, PacketBuff.Length); if (r > 0) { clientSocket.Send(PacketBuff, PacketBuff.Length, SocketFlags.None); } return; }
//获取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; } }