コード例 #1
0
        private void ReceiveCallback(IAsyncResult ar)
        {
            Socket socket = (Socket)ar.AsyncState;

            try
            {
                int received = socket.EndReceive(ar);
                if (received <= 0)
                {
                    CloseClient(index);
                }
                else
                {
                    byte[] dataBuffer = new byte[received];
                    Array.Copy(Buffer, dataBuffer, received);
                    NetworkDataHandler.HandleNetworkInformation(index, dataBuffer);
                    socket.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket);
                }
            }
            catch (Exception ex)
            {
                CloseClient(index);
                System.Diagnostics.Debug.WriteLine(ex);
            }
        }
コード例 #2
0
 public static void SetupServer()
 {
     for (int i = 0; i < Constants.MAX_CONNECTIONS; i++)
     {
         Clients[i] = new Client();
     }
     ServerSocket.Bind(new IPEndPoint(IPAddress.Any, 8081));
     ServerSocket.Listen(10);
     ServerSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
     NetworkDataHandler.InitializeNetworkPackages(true);
     NetworkDataHandler.SelectionReceived += NetworkDataHandler_SelectionReceived;
 }
コード例 #3
0
        private static void OnReceive()
        {
            byte[] sizeInfo = new byte[4];
            byte[] receivedBuffer = new byte[1024];
            int    totalRead = 0, currentRead = 0;

            try
            {
                currentRead = totalRead = ClientSocket.Receive(sizeInfo);
                if (totalRead <= 0)
                {
                    Console.WriteLine("Not connected to server.");
                }
                else
                {
                    Console.WriteLine("Reading data...");
                    while (totalRead < sizeInfo.Length && currentRead > 0)
                    {
                        currentRead = ClientSocket.Receive(sizeInfo, totalRead, sizeInfo.Length - totalRead, SocketFlags.None);
                        totalRead  += currentRead;
                    }

                    int messageSize = 0;
                    messageSize |= sizeInfo[0];
                    messageSize |= (sizeInfo[1] << 8);
                    messageSize |= (sizeInfo[2] << 16);
                    messageSize |= (sizeInfo[3] << 24);

                    byte[] data = new byte[messageSize];
                    totalRead   = 0;
                    currentRead = totalRead = ClientSocket.Receive(data, totalRead, data.Length - totalRead, SocketFlags.None);
                    while (totalRead < messageSize && currentRead > 0)
                    {
                        currentRead = ClientSocket.Receive(data, totalRead, data.Length - totalRead, SocketFlags.None);
                        totalRead  += currentRead;
                    }

                    Debug.WriteLine("Received message, handling");
                    NetworkDataHandler.HandleNetworkInformation(messageSize, data);
                }
            }
            catch
            {
                Console.WriteLine("Not connected to server.");
            }
        }
コード例 #4
0
        public void TryRegister(object obj, EventNetworkUpdate e)
        {
            dynamic get = JsonConvert.DeserializeObject(e.Data);

            if ((JsonTypes)get.JsonType == JsonTypes.RegisterData)
            {
                var response = JsonConvert.DeserializeObject <RegisterData>(e.Data);

                if (response.Code == 0)
                {
                    User.Id = response.Id;
                    ConsoleExtension.PrintText("Регистрация на сервере успешно произведена.");
                }
                else
                {
                    ConsoleExtension.PrintError("Не удалось зарегистрироваться на сервере: " + response.Description);
                }
                EventUpdate -= TryRegister;
            }
        }
コード例 #5
0
        //private Socket    _socket;

        public Connect(string url, int port, User user)
        {
            //_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //_socket.Connect(IPAddress.Parse(url), port);
            User    = user;
            _server = new TcpClient();

            try
            {
                _server.Connect(url, port);
            }
            catch (SocketException)
            {
                Console.WriteLine($"Не удалось подключится к {url}: {port}");
                return;
            }

            if (_server.Connected)
            {
                _networkEnabled = true;
                _read           = new StreamReader(_server.GetStream());
                _write          = new StreamWriter(_server.GetStream());

                _timer          = new System.Timers.Timer(25);
                _timer.Elapsed += DataEngine;
                _timer.Start();

                var registerData = new RegisterData {
                    Name = user.Name
                };
                SendData(registerData);

                EventUpdate += ReceiveMessage;
                EventUpdate += TryRegister;
            }
        }
コード例 #6
0
    private void Start()
    {
        inputGate  = new InputGate();
        outputGate = new OutputGate();
        OnHostSet.Invoke("Host: " + host);
        inputGate.client          = this;
        outputGate.client         = this;
        NetworkDataHandler.client = this;
        NetworkDataHandler.InitializePackages();
        NetworkDataHandler.modelGeometry = modelGeometry;
        //var mat = Matrix4x4.TRS(modelGeometry.position, modelGeometry.rotation, modelGeometry.localScale);
        var mat = Matrix4x4.identity;

        mat.m01 = mat.m02 = mat.m03 = 1;
        mat.m10 = mat.m12 = mat.m13 = 1;
        mat.m20 = mat.m21 = mat.m23 = 1;
        mat.m30 = mat.m31 = mat.m32 = 1;
        var convertMatrix = Matrix4x4.identity; convertMatrix.m00 = -1.0f;

        mat           *= convertMatrix;
        convertMatrix *= mat;

        Debug.Log(convertMatrix);
    }
コード例 #7
0
        public async Task ReceiveDataAsync()
        {
            byte[] inputBuffer = null;
#if !UNITY_EDITOR
            while (true)
            {
                string errorLog            = string.Empty;
                var    stream              = ClientSocket.InputStream.AsStreamForRead();
                byte[] inputDataTypeBuffer = new byte[2];
                byte[] inputLengthBuffer   = new byte[4];

                await stream.ReadAsync(inputDataTypeBuffer, 0, 2);

                NetworkDataType inputType = (NetworkDataType)BitConverter.ToInt16(inputDataTypeBuffer, 0);
                await stream.ReadAsync(inputLengthBuffer, 0, 4);

                var inputLength = BitConverter.ToInt32(inputLengthBuffer, 0);
                inputBuffer = new byte[inputLength];
                await stream.ReadAsync(inputBuffer, 0, inputBuffer.Length);

                NetworkDataHandler.HandleNetworkData(inputBuffer, inputType);
            }
#endif
        }
コード例 #8
0
 public static void ConnectToServer()
 {
     Console.WriteLine("Connecting to server...");
     NetworkDataHandler.InitializeNetworkPackages();
     ClientSocket.BeginConnect("192.168.1.101", 8081, new AsyncCallback(ConnectCallback), ClientSocket);
 }