188 lines
5.7 KiB
C#
188 lines
5.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace UnityEngine.Networking
|
|
{
|
|
// Token: 0x02000012 RID: 18
|
|
internal sealed class LocalClient : NetworkClient
|
|
{
|
|
// Token: 0x06000074 RID: 116 RVA: 0x000067F0 File Offset: 0x000049F0
|
|
public override void Disconnect()
|
|
{
|
|
ClientScene.HandleClientDisconnect(this.m_Connection);
|
|
if (this.m_Connected)
|
|
{
|
|
this.PostInternalMessage(33);
|
|
this.m_Connected = false;
|
|
}
|
|
this.m_AsyncConnect = NetworkClient.ConnectState.Disconnected;
|
|
this.m_LocalServer.RemoveLocalClient(this.m_Connection);
|
|
}
|
|
|
|
// Token: 0x06000075 RID: 117 RVA: 0x00006840 File Offset: 0x00004A40
|
|
internal void InternalConnectLocalServer(bool generateConnectMsg)
|
|
{
|
|
if (this.m_FreeMessages == null)
|
|
{
|
|
this.m_FreeMessages = new Stack<LocalClient.InternalMsg>();
|
|
for (int i = 0; i < 64; i++)
|
|
{
|
|
LocalClient.InternalMsg internalMsg = default(LocalClient.InternalMsg);
|
|
this.m_FreeMessages.Push(internalMsg);
|
|
}
|
|
}
|
|
this.m_LocalServer = NetworkServer.instance;
|
|
this.m_Connection = new ULocalConnectionToServer(this.m_LocalServer);
|
|
base.SetHandlers(this.m_Connection);
|
|
this.m_Connection.connectionId = this.m_LocalServer.AddLocalClient(this);
|
|
this.m_AsyncConnect = NetworkClient.ConnectState.Connected;
|
|
NetworkClient.SetActive(true);
|
|
base.RegisterSystemHandlers(true);
|
|
if (generateConnectMsg)
|
|
{
|
|
this.PostInternalMessage(32);
|
|
}
|
|
this.m_Connected = true;
|
|
}
|
|
|
|
// Token: 0x06000076 RID: 118 RVA: 0x000068F9 File Offset: 0x00004AF9
|
|
internal override void Update()
|
|
{
|
|
this.ProcessInternalMessages();
|
|
}
|
|
|
|
// Token: 0x06000077 RID: 119 RVA: 0x00006904 File Offset: 0x00004B04
|
|
internal void AddLocalPlayer(PlayerController localPlayer)
|
|
{
|
|
if (LogFilter.logDev)
|
|
{
|
|
Debug.Log(string.Concat(new object[]
|
|
{
|
|
"Local client AddLocalPlayer ",
|
|
localPlayer.gameObject.name,
|
|
" conn=",
|
|
this.m_Connection.connectionId
|
|
}));
|
|
}
|
|
this.m_Connection.isReady = true;
|
|
this.m_Connection.SetPlayerController(localPlayer);
|
|
NetworkIdentity unetView = localPlayer.unetView;
|
|
if (unetView != null)
|
|
{
|
|
ClientScene.SetLocalObject(unetView.netId, localPlayer.gameObject);
|
|
unetView.SetConnectionToServer(this.m_Connection);
|
|
}
|
|
ClientScene.InternalAddPlayer(unetView, localPlayer.playerControllerId);
|
|
}
|
|
|
|
// Token: 0x06000078 RID: 120 RVA: 0x000069B4 File Offset: 0x00004BB4
|
|
private void PostInternalMessage(byte[] buffer, int channelId)
|
|
{
|
|
LocalClient.InternalMsg internalMsg;
|
|
if (this.m_FreeMessages.Count == 0)
|
|
{
|
|
internalMsg = default(LocalClient.InternalMsg);
|
|
}
|
|
else
|
|
{
|
|
internalMsg = this.m_FreeMessages.Pop();
|
|
}
|
|
internalMsg.buffer = buffer;
|
|
internalMsg.channelId = channelId;
|
|
this.m_InternalMsgs.Add(internalMsg);
|
|
}
|
|
|
|
// Token: 0x06000079 RID: 121 RVA: 0x00006A0C File Offset: 0x00004C0C
|
|
private void PostInternalMessage(short msgType)
|
|
{
|
|
NetworkWriter networkWriter = new NetworkWriter();
|
|
networkWriter.StartMessage(msgType);
|
|
networkWriter.FinishMessage();
|
|
this.PostInternalMessage(networkWriter.AsArray(), 0);
|
|
}
|
|
|
|
// Token: 0x0600007A RID: 122 RVA: 0x00006A3C File Offset: 0x00004C3C
|
|
private void ProcessInternalMessages()
|
|
{
|
|
if (this.m_InternalMsgs.Count != 0)
|
|
{
|
|
List<LocalClient.InternalMsg> internalMsgs = this.m_InternalMsgs;
|
|
this.m_InternalMsgs = this.m_InternalMsgs2;
|
|
for (int i = 0; i < internalMsgs.Count; i++)
|
|
{
|
|
LocalClient.InternalMsg internalMsg = internalMsgs[i];
|
|
if (this.s_InternalMessage.reader == null)
|
|
{
|
|
this.s_InternalMessage.reader = new NetworkReader(internalMsg.buffer);
|
|
}
|
|
else
|
|
{
|
|
this.s_InternalMessage.reader.Replace(internalMsg.buffer);
|
|
}
|
|
this.s_InternalMessage.reader.ReadInt16();
|
|
this.s_InternalMessage.channelId = internalMsg.channelId;
|
|
this.s_InternalMessage.conn = base.connection;
|
|
this.s_InternalMessage.msgType = this.s_InternalMessage.reader.ReadInt16();
|
|
this.m_Connection.InvokeHandler(this.s_InternalMessage);
|
|
this.m_FreeMessages.Push(internalMsg);
|
|
base.connection.lastMessageTime = Time.time;
|
|
}
|
|
this.m_InternalMsgs = internalMsgs;
|
|
this.m_InternalMsgs.Clear();
|
|
for (int j = 0; j < this.m_InternalMsgs2.Count; j++)
|
|
{
|
|
this.m_InternalMsgs.Add(this.m_InternalMsgs2[j]);
|
|
}
|
|
this.m_InternalMsgs2.Clear();
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600007B RID: 123 RVA: 0x00006BAC File Offset: 0x00004DAC
|
|
internal void InvokeHandlerOnClient(short msgType, MessageBase msg, int channelId)
|
|
{
|
|
NetworkWriter networkWriter = new NetworkWriter();
|
|
networkWriter.StartMessage(msgType);
|
|
msg.Serialize(networkWriter);
|
|
networkWriter.FinishMessage();
|
|
this.InvokeBytesOnClient(networkWriter.AsArray(), channelId);
|
|
}
|
|
|
|
// Token: 0x0600007C RID: 124 RVA: 0x00006BE1 File Offset: 0x00004DE1
|
|
internal void InvokeBytesOnClient(byte[] buffer, int channelId)
|
|
{
|
|
this.PostInternalMessage(buffer, channelId);
|
|
}
|
|
|
|
// Token: 0x04000051 RID: 81
|
|
private const int k_InitialFreeMessagePoolSize = 64;
|
|
|
|
// Token: 0x04000052 RID: 82
|
|
private List<LocalClient.InternalMsg> m_InternalMsgs = new List<LocalClient.InternalMsg>();
|
|
|
|
// Token: 0x04000053 RID: 83
|
|
private List<LocalClient.InternalMsg> m_InternalMsgs2 = new List<LocalClient.InternalMsg>();
|
|
|
|
// Token: 0x04000054 RID: 84
|
|
private Stack<LocalClient.InternalMsg> m_FreeMessages;
|
|
|
|
// Token: 0x04000055 RID: 85
|
|
private NetworkServer m_LocalServer;
|
|
|
|
// Token: 0x04000056 RID: 86
|
|
private bool m_Connected;
|
|
|
|
// Token: 0x04000057 RID: 87
|
|
private NetworkMessage s_InternalMessage = new NetworkMessage();
|
|
|
|
// Token: 0x02000013 RID: 19
|
|
private struct InternalMsg
|
|
{
|
|
// Token: 0x04000058 RID: 88
|
|
internal byte[] buffer;
|
|
|
|
// Token: 0x04000059 RID: 89
|
|
internal int channelId;
|
|
}
|
|
}
|
|
}
|