Exemple #1
0
        public SharpDBConnection GetConnection()
        {
            NetMQSocket socket = new NetMQ.Sockets.RequestSocket();

            //	socket.Options.CopyMessages = false;
            socket.Options.Linger = TimeSpan.FromSeconds(5);
            socket.Connect(ConnectionString);

            var connection = new SharpDBConnection(this, socket, SerializerFactory());

            m_connections.Add(connection);

            return(connection);
        }
Exemple #2
0
        private Protocol.RegisterServiceResponse Initialize()
        {
            NetMQ.Sockets.RequestSocket req = new NetMQ.Sockets.RequestSocket();
            req.Connect(ServerAddress.RegisterServiceAddress);
            var stream = new System.IO.MemoryStream();

            ProtoBuf.Serializer.Serialize(stream, new Tomato.Net.Protocol.RegisterService()
            {
                ServiceName  = ServiceName,
                ProtocolList = MessageHandle.Instance.DicHandles.Keys.Select(i => (int)i).ToList(),
                IsRegister   = true,
            });
            if (req.TrySendFrame(stream.ToArray()))
            {
                return(ProtoBuf.Serializer.Deserialize <Protocol.RegisterServiceResponse>(new System.IO.MemoryStream(req.ReceiveFrameBytes())));
            }
            return(null);
        }
Exemple #3
0
 /// <summary>
 /// 初始化服务模块
 /// 在这里,我们将已注册的protocolID发送到路由端 Tomato.RouteService
 /// </summary>
 /// <returns></returns>
 private ResRegisterService _InitializeService(bool isRegister = true)
 {
     Logger.Debug($"{this.ServiceName} 正在向路由注册模块...");
     NetMQ.Sockets.RequestSocket req = new NetMQ.Sockets.RequestSocket();
     req.Connect(ServerAddress.RegisterServiceAddress);
     using (var stream = new System.IO.MemoryStream())
     {
         ProtoBuf.Serializer.Serialize(stream, new ReqRegisterService()
         {
             ServiceName  = ServiceName,
             ProtocolList = MessageHandle.DicHandles.Keys.Select(i => (int)i).ToList(),
             IsRegister   = isRegister,
         });
         if (req.TrySendFrame(stream.ToArray()))
         {
             return(ProtoBuf.Serializer.Deserialize <ResRegisterService>(new System.IO.MemoryStream(req.ReceiveFrameBytes())));
         }
     }
     return(null);
 }
Exemple #4
0
 /// <summary>
 /// 发送请求
 /// </summary>
 /// <typeparam name="R">接收对象类型</typeparam>
 /// <param name="header">头部对象</param>
 /// <param name="body">内容对象</param>
 /// <returns></returns>
 public Task <R> Request <R>(Header header, IProtocol body) where R : IProtocol
 {
     return(Task.Factory.StartNew <R>(() =>
     {
         var req_msg = Serialize(header, body);
         using (var socket = new NetMQ.Sockets.RequestSocket(ServerAddress.RouterAddress))
         {
             if (socket.TrySendMultipartMessage(Timeout, req_msg))//发送msg
             {
                 NetMQMessage rep_msg = new NetMQMessage();
                 if (socket.TryReceiveMultipartMessage(Timeout, ref rep_msg))//接收msg
                 {
                     var msg_id = rep_msg[0].ConvertToInt32();
                     if (msg_id >= 800000 && msg_id <= 899999)
                     {
                         throw new RemoteServiceException($"错误代码 : {msg_id}\r\n{rep_msg[1].ConvertToString(Encoding.UTF8)}");
                     }
                     else if (msg_id == (int)Tomato.Net.Protocol.ProtoEnum.Exception)
                     {
                         var exception = Deserialize <Tomato.Net.Protocol.ResException>(rep_msg);
                         throw exception.GetException();//抛出服务器异常信息
                     }
                     return Deserialize <R>(rep_msg);
                 }
                 else
                 {
                     throw new NetMQ.EndpointNotFoundException($"Request Guid : {header.GUID}.消息接收失败");
                 }
             }
             else
             {
                 throw new NetMQ.EndpointNotFoundException($"Request Guid : {header.GUID}.消息发送失败");
             }
         }
     }));
 }
Exemple #5
0
        //!
        //! receiver function, receiving the initial scene from the katana server (executed in separate thread)
        //!
        public void sceneReceiver()
        {
            //create NetMQ context
            NetMQContext ctx = NetMQContext.Create();

            print("Trying to receive scene.");

            OnProgress(0.1f, "Init Scene Receiver..");


            NetMQ.Sockets.RequestSocket sceneReceiver = ctx.CreateRequestSocket();
            sceneReceiver.Connect("tcp://" + VPETSettings.Instance.serverIP + ":5565");

            print("Server set up.");


            byte[] byteStream;


            // HEader
            print("header");
            sceneReceiver.Send("header");
            byteStream = sceneReceiver.Receive() as byte[];
            print("byteStreamHeader size: " + byteStream.Length);
            if (doWriteScene)
            {
                writeBinary(byteStream, "header");
            }

            int dataIdx = 0;

            VPETSettings.Instance.lightIntensityFactor = BitConverter.ToSingle(byteStream, dataIdx);
            print("VPETSettings.Instance.lightIntensityFactor " + VPETSettings.Instance.lightIntensityFactor);
            dataIdx += sizeof(float);
            VPETSettings.Instance.textureBinaryType = BitConverter.ToInt32(byteStream, dataIdx);

            OnProgress(0.15f, "..Received Header..");


            //VpetHeader vpetHeader = SceneDataHandler.ByteArrayToStructure<VpetHeader>(byteStream, ref dataIdx);
            //VPETSettings.Instance.lightIntensityFactor = vpetHeader.lightIntensityFactor;
            //VPETSettings.Instance.textureBinaryType = vpetHeader.textureBinaryType;

            // Textures
            if (VPETSettings.Instance.doLoadTextures)
            {
                print("textures");
                sceneReceiver.Send("textures");
                byteStream = sceneReceiver.Receive() as byte[];
                print("byteStreamTextures size: " + byteStream.Length);
                if (doWriteScene)
                {
                    writeBinary(byteStream, "textu");
                }
                sceneLoader.SceneDataHandler.TexturesByteData = byteStream;

                OnProgress(0.33f, "..Received Texture..");
            }


            // Objects
            print("objects");
            sceneReceiver.Send("objects");
            byteStream = sceneReceiver.Receive() as byte[];
            print("byteStreamObjects size: " + byteStream.Length);
            if (doWriteScene)
            {
                writeBinary(byteStream, "objec");
            }
            sceneLoader.SceneDataHandler.ObjectsByteData = byteStream;

            OnProgress(0.80f, "..Received Objects..");


            // Nodes
            print("nodes");
            sceneReceiver.Send("nodes");
            byteStream = sceneReceiver.Receive() as byte[];
            print("byteStreamNodess size: " + byteStream.Length);
            if (doWriteScene)
            {
                writeBinary(byteStream, "nodes");
            }
            sceneLoader.SceneDataHandler.NodesByteData = byteStream;

            OnProgress(0.9f, "..Received Nodes..");



            sceneReceiver.Disconnect("tcp://" + VPETSettings.Instance.serverIP + ":5565");
            sceneReceiver.Close();

            print("done receive scene");

            m_sceneTransferDirty = true;

            OnProgress(1.0f, "..Building Scene..");
        }
Exemple #6
0
        //!
        //! receiver function, receiving the initial scene from the katana server (executed in separate thread)
        //!
        public void sceneReceiver()
        {
            //create NetMQ context
            NetMQContext ctx = NetMQContext.Create();

            print("Trying to receive scene.");

            OnProgress(0.1f, "Init Scene Receiver..");


            NetMQ.Sockets.RequestSocket sceneReceiver = ctx.CreateRequestSocket();
            sceneReceiver.Connect("tcp://" + VPETSettings.Instance.serverIP + ":5565");

            print("Server set up.");


            SceneObjectKatana sceneObjectKatana = new SceneObjectKatana();
            bool success = false;

            if (VPETSettings.Instance.doLoadTextures)
            {
                print("textu");
                sceneReceiver.Send("textu");
                byte[] byteStreamTextures = sceneReceiver.Receive() as byte[];
                print("byteStreamTextures size: " + byteStreamTextures.Length);
                success = sceneObjectKatana.parseTexture(byteStreamTextures);
                print("Texture Count: " + sceneObjectKatana.rawTextureList.Count);
                if (doWriteScene)
                {
                    writeBinary(byteStreamTextures, "textu");
                }

                OnProgress(0.33f, "..Received Texture..");
            }


            print("objec");
            sceneReceiver.Send("objec");
            byte[] byteStreamObjects = sceneReceiver.Receive() as byte[];
            print("byteStreamObjects size: " + byteStreamObjects.Length);
            success = sceneObjectKatana.parseObject(byteStreamObjects);
            print("Object Count: " + sceneObjectKatana.rawVertexList.Count);
            if (doWriteScene)
            {
                writeBinary(byteStreamObjects, "objec");
            }

            OnProgress(0.80f, "..Received Objects..");

            print("nodes");
            sceneReceiver.Send("nodes");
            byte[] byteStreamNodes = sceneReceiver.Receive() as byte[];
            print("byteStreamNodess size: " + byteStreamNodes.Length);
            success = sceneObjectKatana.parseNode(byteStreamNodes);
            print("Node count: " + sceneObjectKatana.rawNodeList.Count);
            if (doWriteScene)
            {
                writeBinary(byteStreamNodes, "nodes");
            }


            OnProgress(0.9f, "..Received Nodes..");



            if (success)
            {
                receiveObjectQueue.Add(sceneObjectKatana);
            }


            sceneReceiver.Disconnect("tcp://" + VPETSettings.Instance.serverIP + ":5565");
            sceneReceiver.Close();

            print("done receive scene");

            OnProgress(1.0f, "..Building Scene..");
        }