Hyluss icon

[Unity] Login Core

Hyluss | PRO | 12/23/17 05:33:24 PM UTC | 0 ⭐ | 468 👁️ | Never ⏰ | []
C# |

2.29 KB

|

None

|

0 👍

/

0 👎

using UnityEngine;
using System.Collections;
using System;
using System.Net;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Threading;
 
public class LoginCore : MonoBehaviour {
 
    public string serverAddress = "127.0.0.1";
    public int serverPort = 32211;
 
    private TcpClient _client;
    private NetworkStream _stream;
    private Thread _thread;
 
    private byte[] _buffer = new byte[1024];
    private string receiveMsg = "";
    private bool isConnected = false;
    private bool connectionError = false;
    private float connectionTimer = 0.0f;
 
    void Start() {
        SetupConnection();
    }
 
    void OnApplicationQuit() {
        CloseConnection();
    }
 
    void OnGUI() {
        if(connectionError) {
            GUI.Label(new Rect(10,10,250,25), "Time to reconnect: "+connectionTimer.ToString()+" of 15 s");
            if(connectionTimer >= 15.0f) {
                connectionError = false;
                connectionTimer = 0.0f;
                SetupConnection();
            } else {
                connectionTimer += Time.deltaTime;
            }
        } else if(isConnected) {
            if(GUI.Button(new Rect(10,10,250,25), "LOGIN"))
                SendData("0x000/Testuser/Testpassword");
        }
    }
 
    private void SetupConnection() {
        try {
            _thread = new Thread(ReceiveData);
            _thread.IsBackground = true;
            _client = new TcpClient(serverAddress, serverPort);
            _stream = _client.GetStream();
            _thread.Start();
            isConnected = true;
        } catch (Exception e) {
            CloseConnection();
            connectionError = true;
            Debug.Log(e.ToString());
        }
    }
 
    private void ReceiveData() {
        if(!isConnected)
            return;
 
        int numberOfBytesRead = 0;
        while(isConnected && _stream.CanRead) {
            try {
                numberOfBytesRead = _stream.Read(_buffer, 0, _buffer.Length);
                receiveMsg = Encoding.ASCII.GetString(_buffer, 0, numberOfBytesRead);
                _stream.Flush();
                Debug.Log(receiveMsg);
                receiveMsg = "";
            } catch (Exception e) {
                CloseConnection();
                Debug.Log(e.ToString());
            }
        }
    }
 
    private void CloseConnection() {
        if(isConnected) {
            _thread.Interrupt();
            _stream.Close();
            _client.Close();
            isConnected = false;
            receiveMsg = "";
        }
    }
 
    private void SendData(string msgToSend) {
        byte[] bytesToSend = Encoding.ASCII.GetBytes(msgToSend);
        if(_stream.CanWrite)
            _stream.Write(bytesToSend, 0, bytesToSend.Length);
    }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎