Created
June 21, 2016 06:53
-
-
Save jagt/6f5a9f497f1650b8bc1fe092145a1514 to your computer and use it in GitHub Desktop.
uNet LLAPI working kitchen sink
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using UnityEngine.Networking; | |
using System.Text; | |
using System.Collections.Generic; | |
public class MonoLLAPI : MonoBehaviour { | |
int reliableStateUpdateChannel; | |
int unreliableChannel; | |
int port = 54231; | |
HostTopology ht; | |
private enum State | |
{ | |
Idle, | |
ClientConnected, | |
ServerHosted, | |
} | |
private State _state; | |
private string _sendString = "send string"; | |
private int _sockedID; | |
private int _connID; | |
private List<string> _received; | |
private UTF8Encoding utf8; | |
// Use this for initialization | |
void Start () { | |
GlobalConfig netConfig = new GlobalConfig(); | |
NetworkTransport.Init(netConfig); | |
ConnectionConfig conConfig = new ConnectionConfig(); | |
reliableStateUpdateChannel = conConfig.AddChannel(QosType.ReliableStateUpdate); | |
unreliableChannel = conConfig.AddChannel(QosType.Unreliable); | |
ht = new HostTopology(conConfig, 5); | |
utf8 = new UTF8Encoding(); | |
_received = new List<string>(); | |
return; | |
} | |
// Update is called once per frame | |
void Update () { | |
int hostID; | |
int connID; | |
int channelID; | |
int dataSize; | |
byte[] buffer = new byte[1024]; | |
byte error; | |
if (_state == State.ServerHosted) | |
{ | |
NetworkEventType networkEvent = NetworkEventType.DataEvent; | |
while (networkEvent != NetworkEventType.Nothing) | |
{ | |
networkEvent = NetworkTransport.Receive(out hostID, out connID, out channelID, buffer, 1024, out dataSize, out error); | |
switch (networkEvent) | |
{ | |
// ignore connection events for now | |
case NetworkEventType.DataEvent: | |
case NetworkEventType.BroadcastEvent: | |
string recvStr = utf8.GetString(buffer, 0, dataSize); | |
_received.Add(recvStr); | |
break; | |
case NetworkEventType.ConnectEvent: | |
_received.Add("connected! " + connID); | |
break; | |
} | |
} | |
} | |
else if (_state == State.ClientConnected) | |
{ | |
NetworkEventType networkEvent = NetworkEventType.DataEvent; | |
while (networkEvent != NetworkEventType.Nothing) | |
{ | |
networkEvent = NetworkTransport.Receive(out hostID, out connID, out channelID, buffer, 1024, out dataSize, out error); | |
switch (networkEvent) | |
{ | |
case NetworkEventType.ConnectEvent: | |
// !!! needs to receive to really enable this connection | |
Debug.Log("connect of: " + connID); | |
break; | |
default: | |
break; | |
} | |
} | |
} | |
return; | |
} | |
void OnGUI() | |
{ | |
GUILayout.BeginArea(new Rect(10, 10, 400, 400)); | |
if (_state == State.Idle) | |
{ | |
if (GUILayout.Button("Start As Server")) | |
{ | |
_sockedID = NetworkTransport.AddHost(ht, port); | |
if (_sockedID < 0) | |
{ | |
throw new System.Exception("socket open fail: " + _sockedID); | |
} | |
_state = State.ServerHosted; | |
} | |
if (GUILayout.Button("Start As Client")) | |
{ | |
_sockedID = NetworkTransport.AddHost(ht); | |
if (_sockedID < 0) | |
{ | |
throw new System.Exception("socket open fail: " + _sockedID); | |
} | |
byte err; | |
_connID = NetworkTransport.Connect(_sockedID, "127.0.0.1", port, 0, out err); | |
if (err != (byte)NetworkError.Ok) | |
{ | |
throw new System.Exception("client connection fail :" + err); | |
} | |
_state = State.ClientConnected; | |
} | |
} | |
else if (_state == State.ClientConnected) | |
{ | |
_sendString = GUILayout.TextField(_sendString); | |
if (GUILayout.Button("Send")) | |
{ | |
byte[] bytes = utf8.GetBytes(_sendString); | |
byte err; | |
Debug.Log(string.Format("{0}, {1}", _sockedID, _connID)); | |
bool sent = NetworkTransport.Send(_sockedID, _connID, reliableStateUpdateChannel, bytes, bytes.Length, out err); | |
if (!sent) | |
throw new System.Exception("send fail :" + err); | |
if (err != (byte)NetworkError.Ok) | |
throw new System.Exception("wtf :" + err); | |
} | |
} | |
else if (_state == State.ServerHosted) | |
{ | |
foreach (var str in _received) | |
{ | |
GUILayout.Label(str); | |
} | |
} | |
GUILayout.EndArea(); | |
return; | |
} | |
void OnDisable() | |
{ | |
NetworkTransport.Shutdown(); | |
return; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment