forked from CAWCAWCAW/Votekick
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVKPlayer.cs
147 lines (136 loc) · 5.75 KB
/
VKPlayer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Terraria;
using TerrariaApi;
using TerrariaApi.Server;
using TShockAPI.DB;
using TShockAPI;
namespace VoteKick
{
class VKPlayer : TSPlayer
{
public VKPlayer(int index)
: base(index)
{
// TODO create a list of players.
}
public void Connect(string ip)
{
//base.SendData((PacketTypes)77, ip);
//NetMessage.SendData(77, base.Index, -1, ip, 0, 0f, 0f, 0f, 0);
SendData(77, base.Index, -1, ip, 0, 0f, 0f, 0f, 0);
}
private void SendData(int msgType, int remoteClient = -1, int ignoreClient = -1, string text = "", int number = 0, float number2 = 0f, float number3 = 0f, float number4 = 0f, int number5 = 0)
{
// TODO
// base.SendData does this...
// Check if ( RealPlayer && !ConnectionAlive ) return ;
if (Main.netMode == 0)
{
return;
}
int num = 256;
if (Main.netMode == 2 && remoteClient >= 0)
{
num = remoteClient;
}
if (!InvokeNetSendData(ref msgType, ref remoteClient, ref ignoreClient, ref text, ref number,
ref number2, ref number3, ref number4, ref number5))
{
lock (NetMessage.buffer[num].writeBuffer)
{
// For some reason cannot access MessageBuffer's public BinaryWriter variable...
// BinaryWriter binaryWriter = NetMessage.buffer[num].binaryWriter;
BinaryWriter binaryWriter = new BinaryWriter( new MemoryStream( NetMessage.buffer[num].writeBuffer) );
long position = 0;
binaryWriter.BaseStream.Position = 2L;
binaryWriter.Write((byte)msgType);
switch (msgType)
{
// TODO create PacketType enum. It must start at +1 of what
// TerrariaApi.Server.PacketType ends with. Currently that means
// Packet 77 is are new Connect PacketType
case 77:
binaryWriter.Write(text);
if (Main.dedServ)
{
Console.WriteLine(Netplay.serverSock[num].tcpClient.Client.RemoteEndPoint.ToString() + " connected to: " + text);
}
break;
}
int num16 = (int)binaryWriter.BaseStream.Position;
binaryWriter.BaseStream.Position = position;
binaryWriter.Write((short)num16);
binaryWriter.BaseStream.Position = (long)num16;
if (Netplay.serverSock[remoteClient].tcpClient.Connected)
{
try
{
NetMessage.buffer[remoteClient].spamCount++;
Main.txMsg++;
Main.txData += num16;
Main.txMsgType[msgType]++;
Main.txDataType[msgType] += num16;
NetMessage.SendBytes(Netplay.serverSock[remoteClient], NetMessage.buffer[num].writeBuffer, 0, num16, new AsyncCallback(Netplay.serverSock[remoteClient].ServerWriteCallBack), Netplay.serverSock[remoteClient].networkStream);
}
catch
{
}
}
if (Main.verboseNetplay)
{
for (int num25 = 0; num25 < num16; num25++)
{
byte arg_2315_0 = NetMessage.buffer[num].writeBuffer[num25];
}
}
NetMessage.buffer[num].writeLocked = false;
if (msgType == 77 && Main.netMode == 2)
{
// TODO see what netMode == 2 means.. Leaving this commented out for now.
//Netplay.serverSock[num].kill = true;
}
}
}
}
private bool InvokeNetSendData(ref int msgType, ref int remoteClient, ref int ignoreClient, ref string text,
ref int number, ref float number2, ref float number3, ref float number4, ref int number5)
{
// TODO
// This can be removed because our msgType is never going to be ChatText
//if (Main.netMode != 2 && msgType == (int)PacketTypes.ChatText && this.InvokeClientChat(ref text))
// return true;
SendDataEventArgs args = new SendDataEventArgs
{
MsgId = (PacketTypes)msgType,
remoteClient = remoteClient,
ignoreClient = ignoreClient,
text = text,
number = number,
number2 = number2,
number3 = number3,
number4 = number4,
number5 = number5
};
ServerApi.Hooks.NetSendData.Invoke(args);
msgType = (int)args.MsgId;
remoteClient = args.remoteClient;
ignoreClient = args.ignoreClient;
text = args.text;
number = args.number;
number2 = args.number2;
number3 = args.number3;
number4 = args.number4;
number5 = args.number5;
return args.Handled;
}
}
}