示例#1
0
        }//SendServerMessage

        void SendAllClientsOnline(TcpClient client)
        {
            SCMessage message = new SCMessage {
                MessageType = SCMessageType.All_Clients_Online
            };

            string messageText = string.Empty;

            for (int i = 0; i < this.Clients.Count; i++)
            {
                if (this.Clients[i].Client == client)
                {
                    continue;
                }

                if (i + 1 == this.Clients.Count)
                {
                    messageText += this.Clients[i].NickName;

                    break;
                }//if

                messageText += this.Clients[i].NickName + " ";
            }//for

            message.Message = messageText;

            var bytes = SCMessage.SerializeJSON_ToBytes(message);

            client.GetStream().Write(bytes, 0, bytes.Length);
        }//SendAllClientsOnline
示例#2
0
        }     //SendTCP

        public void Dispose()
        {
            this.ServerStart = false;

            Program.ConsoleWriteLine($"Server Stop ({DateTime.Now.ToLongTimeString()})", Program.Red, Color.Black);

            SCMessage message = new SCMessage {
                MessageType = SCMessageType.Server_Exit
            };

            for (int i = 0; i < this.Clients.Count; i++)
            {
                message.Message = i.ToString();

                var ExitMessage = SCMessage.SerializeJSON_ToBytes(message);

                this.Clients[i].Client.GetStream().Write(ExitMessage, 0, ExitMessage.Length);

                this.Clients[i].Client.Close();

                this.Clients[i].Client = null;
            }//for

            this.FileSendTCP.Stop();

            this.FileSendTCP = null;

            this.Clients = null;

            this.fpsRun = false;

            this.TCP.Stop();

            this.TCP = null;

            this.UDP_Video.Close();

            this.UDP_Video = null;

            this.screenViewer.ScreenRefreshed = null;

            this.screenViewer.Stop();

            this.screenViewer = null;

            if (this.EnableAudio)
            {
                this.UDP_Audio.Close();

                this.UDP_Audio = null;

                this.voice.VoiceRefreshed = null;

                this.voice.Stop();

                this.voice = null;
            } //if
        }     //Dispose
示例#3
0
        }     //TCPListen

        public void SendFileServer(string Fname)
        {
            SCMessage message = new SCMessage {
                MessageType = SCMessageType.SendFileName, Message = Fname
            };

            var bytes = SCMessage.SerializeJSON_ToBytes(message);

            this.SendAll_Clients(bytes, 0, bytes.Length);
        }//SendFileServer
示例#4
0
        }//SendFileServer

        public void SendServerMessage(string Text)
        {
            SCMessage message = new SCMessage {
                MessageType = SCMessageType.PublicMessage, From = "Server Admin", Message = Text
            };

            var bytes = SCMessage.SerializeJSON_ToBytes(message);

            this.SendAll_Clients(bytes, 0, bytes.Length);
        }//SendServerMessage
 internal BroadcastMessageFactory()
 {
     this.loMessage = new LOMessage();
     this.pdMessage = new PDMessage();
     this.scMessage = new SCMessage();
     this.aaMessage = new AAMessage();
     this.nhMessage = new NHMessage();
     this.broadcastMessageClient = new BroadCastOrderMessageClient();
     this.dgwOrderReply = new DGWOrderReplyMessage();
 }
示例#6
0
        }//ChatFileMessage

        private void FileButton_Click(object sender, RoutedEventArgs e)
        {
            if (this.fileButton == FileButtons.Delete)
            {
                SCMessage message = new SCMessage {
                    MessageType = SCMessageType.DeleteFileServer, Message = this.FileName.Text, From = this.MainWindow.connectionSettings.NickName
                };

                var bytes = SCMessage.SerializeJSON_ToBytes(message);

                this.MainWindow.TCP.GetStream().Write(bytes, 0, bytes.Length);

                this.MainWindow._ChatStackPanel.Children.Remove(this);

                return;
            }//if
            else if (this.fileButton == FileButtons.Download)
            {
                if (this.MainWindow.DownloadFile == true)
                {
                    MessageBox.Show("Wait Last Download File!");
                }//if
                else
                {
                    SaveFileDialog saveFileDialog = new SaveFileDialog();

                    var extension = System.IO.Path.GetExtension(this.FileName.Text);

                    saveFileDialog.FileName = this.FileName.Text;

                    saveFileDialog.Filter = $"({extension})|*{extension}";

                    var result = saveFileDialog.ShowDialog();

                    if (result != null)
                    {
                        if (result.Value)
                        {
                            this.MainWindow.DownloadFilePath = saveFileDialog.FileName;

                            SCMessage message = new SCMessage {
                                MessageType = SCMessageType.SendFileName, Message = this.FileName.Text
                            };

                            var bytes = SCMessage.SerializeJSON_ToBytes(message);

                            this.MainWindow.TCP.GetStream().Write(bytes, 0, bytes.Length);
                        } //if
                    }     //if
                }         //else
            }             //else if
        }                 //FileButton_Click
示例#7
0
        }//AddClientInfo

        void Disconnect(TcpClient Client)
        {
            try {
                var CI = Clients.FirstOrDefault(c => c.Client == Client);

                string nickName = string.Empty;

                if (CI != null)
                {
                    nickName = CI.NickName.Clone() as string;

                    this.SendAll_Clients(SCMessage.SerializeJSON_ToBytes(new SCMessage {
                        Message = nickName, MessageType = SCMessageType.ClientDisconnected_Message
                    }), CI);

                    int index = Clients.IndexOf(CI);

                    if (Clients.Count == index + 1 && index != 0)
                    {
                        SCMessage message = new SCMessage {
                            MessageType = SCMessageType.Client_Disconnected
                        };

                        SendTCP(SCMessage.SerializeJSON_ToBytes(message), Clients[index - 1].Client);
                    }//if
                    else if (Clients.Count >= 3 && index >= 1)
                    {
                        //SendTCP(Encoding.ASCII.GetBytes($"{Clients[index + 1].VideoEndpoint.ToString()};{(this.EnableAudio ? Clients[index + 1].AudioEndpoint.ToString() : string.Empty)}"), Clients[index - 1].Client);

                        SCMessage message = new SCMessage {
                            IP = Clients[index + 1].VideoEndpoint.Address.ToString(), UDP_Video_Port = Clients[index + 1].VideoEndpoint.Port, UDP_Audio_Port = this.EnableAudio ? Clients[index + 1].AudioEndpoint.Port : 0, MessageType = SCMessageType.Send_Client_IP_Ports_Info
                        };

                        SendTCP(SCMessage.SerializeJSON_ToBytes(message), Clients[index - 1].Client);
                    }//else if

                    Clients.Remove(CI);
                }//if

                Program.ConsoleWriteLine(Client.Client.RemoteEndPoint.ToString() + $" Disconnected ({nickName})", Color.OrangeRed, Color.Black);

                Client.Close();
            } //try
            catch {
            } //catch

            Program.SetTitle(Program.GetFirstTitle() + $" | Online {this.Clients.Count}");
        }//Disconnect
    // Serializes message and sends to client based on connection ID
    public void SendSocketMessage(SCMessage message, int userId)
    {
        byte error;

        byte[] buffer = new byte[1024];

        Stream          stream    = new MemoryStream(buffer);
        BinaryFormatter formatter = new BinaryFormatter();

        string str = JsonUtility.ToJson(message);

        formatter.Serialize(stream, str);
        NetworkTransport.Send(socketId, userId, channelId, buffer, buffer.Length, out error);
        if ((NetworkError)error != NetworkError.Ok)
        {
            Debug.Log("Error sending message: " + ((NetworkError)error).ToString());
        }
    }
    //	public void Connect(string ip, int port)
    //	{
    //		byte error;
    //		connectionId = NetworkTransport.Connect(socketId, ip, port, 0, out error);
    //		Debug.Log("Connected to client. ConnectionId: " + connectionId);
    //	}

    // Serializes message into JSON and sends to correct client based on message type.
    public void SendSocketMessage(SCMessage message)
    {
        byte error;

        byte[] buffer = new byte[1024];

        Stream          stream    = new MemoryStream(buffer);
        BinaryFormatter formatter = new BinaryFormatter();

        string str = JsonUtility.ToJson(message);

        foreach (int sendId in revUserList[message.type])              // send message to all receiving clients
        {
            formatter.Serialize(stream, str);
            NetworkTransport.Send(socketId, sendId, channelId, buffer, buffer.Length, out error);
            if ((NetworkError)error != NetworkError.Ok)
            {
                Debug.Log("Error sending message: " + ((NetworkError)error).ToString());
            }
        }
    }
示例#10
0
    public Text messageDisplay;              // FOR DEBUGGING PURPOSES ONLY
    // Checks for received messages and displays their contents in a text display.
    void Update()
    {
        string received = null;

        do
        {
            received = ReceiveMessage();

            if (received != null)
            {
                SCMessage message = JsonUtility.FromJson <SCMessage>(received);

                if (!modules.Contains(message.type))                                // player not authorized to receive message
                {
                    Debug.Log("Illegal " + message.type.ToString() + " message received from server");
                    return;
                }

                switch (message.type)
                {
                case MType.Init:
                    handleInit(received);
                    break;

                case MType.Pilot:
                    handlePilot(received);
                    break;

                case MType.Nav:
                    handleNav(received);
                    break;

                default:
                    break;
                }
            }
        } while (received != null);
    }
示例#11
0
        }//SendAllClientsOnline

        void AddClientInfo(TcpClient client, int Video_Udp_Port, int Audio_Udp_Port, string NickName)
        {
            var clientInfo = new ClientInfo();

            clientInfo.NickName = NickName;

            var ip = (client.Client.RemoteEndPoint as IPEndPoint).Address;

            string firestIpbytes = ip.ToString().Substring(0, ip.ToString().IndexOf('.'));

            if (firestIpbytes == "192" || firestIpbytes == "172" || firestIpbytes == "10")
            {
                clientInfo.ConnectionType = ConnectionTypes.LAN;
            }//if
            else
            {
                clientInfo.ConnectionType = ConnectionTypes.WAN;
            }//else

            clientInfo.VideoEndpoint = new IPEndPoint(ip, Video_Udp_Port);

            if (this.EnableAudio)
            {
                clientInfo.AudioEndpoint = new IPEndPoint(ip, Audio_Udp_Port);
            }//if
            else
            {
                clientInfo.AudioEndpoint = null;
            }//else

            clientInfo.Client = client;

            if (Clients.Count > 0)
            {
                var lastClient = Clients[Clients.Count - 1];

                if (clientInfo.ConnectionType == ConnectionTypes.LAN && lastClient.ConnectionType == ConnectionTypes.WAN)
                {
                    if (Clients.Count == 1)
                    {
                        //SendTCP(Encoding.ASCII.GetBytes($"{Clients[0].VideoEndpoint.ToString()};{(this.EnableAudio ? Clients[0].AudioEndpoint.ToString() : string.Empty)}"), clientInfo.Client);

                        SCMessage message = new SCMessage {
                            IP = Clients[0].VideoEndpoint.Address.ToString(), UDP_Video_Port = Clients[0].VideoEndpoint.Port, UDP_Audio_Port = this.EnableAudio ? Clients[0].AudioEndpoint.Port : 0, MessageType = SCMessageType.Send_Client_IP_Ports_Info
                        };

                        SendTCP(SCMessage.SerializeJSON_ToBytes(message), clientInfo.Client);

                        Clients.Insert(0, clientInfo);
                    }//if
                    else
                    {
                        int FirstWANIndex = Clients.IndexOf(Clients.First(c => c.ConnectionType == ConnectionTypes.WAN));

                        //SendTCP(Encoding.ASCII.GetBytes($"{clientInfo.VideoEndpoint.ToString()};{(this.EnableAudio ? clientInfo.AudioEndpoint.ToString() : string.Empty)}"), Clients[FirstWANIndex - 1].Client);

                        SCMessage message = new SCMessage {
                            IP = clientInfo.VideoEndpoint.Address.ToString(), UDP_Video_Port = clientInfo.VideoEndpoint.Port, UDP_Audio_Port = this.EnableAudio ? clientInfo.AudioEndpoint.Port : 0, MessageType = SCMessageType.Send_Client_IP_Ports_Info
                        };

                        SendTCP(SCMessage.SerializeJSON_ToBytes(message), Clients[FirstWANIndex - 1].Client);

                        //SendTCP(Encoding.ASCII.GetBytes($"{Clients[FirstWANIndex].VideoEndpoint.ToString()};{(this.EnableAudio ? Clients[FirstWANIndex].AudioEndpoint.ToString() : string.Empty)}"), clientInfo.Client);

                        message = new SCMessage {
                            IP = Clients[FirstWANIndex].VideoEndpoint.Address.ToString(), UDP_Video_Port = Clients[FirstWANIndex].VideoEndpoint.Port, UDP_Audio_Port = this.EnableAudio ? Clients[FirstWANIndex].AudioEndpoint.Port : 0, MessageType = SCMessageType.Send_Client_IP_Ports_Info
                        };

                        SendTCP(SCMessage.SerializeJSON_ToBytes(message), clientInfo.Client);

                        Clients.Insert(FirstWANIndex, clientInfo);
                    } //else
                }     //if
                else
                {
                    Clients.Add(clientInfo);

                    //SendTCP(Encoding.ASCII.GetBytes($"{clientInfo.VideoEndpoint.ToString()};{(this.EnableAudio ? clientInfo.AudioEndpoint.ToString() : string.Empty)}"), Clients[Clients.Count - 2].Client);

                    SCMessage message = new SCMessage {
                        IP = clientInfo.VideoEndpoint.Address.ToString(), UDP_Video_Port = clientInfo.VideoEndpoint.Port, UDP_Audio_Port = this.EnableAudio ? clientInfo.AudioEndpoint.Port : 0, MessageType = SCMessageType.Send_Client_IP_Ports_Info
                    };

                    SendTCP(SCMessage.SerializeJSON_ToBytes(message), Clients[Clients.Count - 2].Client);
                } //else
            }     //if
            else
            {
                Clients.Add(clientInfo);
            }//else

            Program.SetTitle(Program.GetFirstTitle() + $" | Online {this.Clients.Count}");
        }//AddClientInfo
示例#12
0
        }             //Main

        void TCPListen()
        {
            try {
                TCP.Start();

                while (true)
                {
                    TcpClient Client = TCP.AcceptTcpClient();

                    //Program.ConsoleWriteLine(Client.Client.RemoteEndPoint.ToString() + " Connecting", Color.GreenYellow, Color.Black);

                    Client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);

                    var ClientStream = Client.GetStream();

                    if (this.EnableAudio == false)
                    {
                        SCMessage message = new SCMessage {
                            MessageType = SCMessageType.Send_Client_Connection_Info, UDP_Video_Port = 1
                        };

                        var bytes = SCMessage.SerializeJSON_ToBytes(message);

                        ClientStream.Write(bytes, 0, bytes.Length);
                    }//if
                    else
                    {
                        SCMessage message = new SCMessage {
                            MessageType = SCMessageType.Send_Client_Connection_Info, UDP_Video_Port = 1, UDP_Audio_Port = 1
                        };

                        var bytes = SCMessage.SerializeJSON_ToBytes(message);

                        ClientStream.Write(bytes, 0, bytes.Length);
                    }//else

                    int BytesRead = 0;

                    try {
                        BytesRead = ClientStream.Read(this.MessageBuffer, 0, this.MessageBuffer.Length);

                        var message = SCMessage.DeserializeJSON_FromBytes(this.MessageBuffer, 0, BytesRead);

                        if (message.MessageType == SCMessageType.Send_Client_Connection_Info)
                        {
                            string Password = message.Message;

                            if (this.Password != Password)
                            {
                                SCMessage scmessage = new SCMessage {
                                    MessageType = SCMessageType.Invalid_Password
                                };

                                var bytes = SCMessage.SerializeJSON_ToBytes(scmessage);

                                ClientStream.Write(bytes, 0, bytes.Length);

                                Program.ConsoleWriteLine(Client.Client.RemoteEndPoint.ToString() + " (Invalid Password)", Color.Red, Color.Black);

                                Client.Close();

                                continue;
                            }//if

                            string NickName = message.From;

                            var checkNick = this.Clients.FirstOrDefault(c => c.NickName == NickName);

                            if (checkNick != null)
                            {
                                SCMessage scmessage = new SCMessage {
                                    MessageType = SCMessageType.Invalid_NickName
                                };

                                var bytes = SCMessage.SerializeJSON_ToBytes(scmessage);

                                ClientStream.Write(bytes, 0, bytes.Length);

                                Program.ConsoleWriteLine(Client.Client.RemoteEndPoint.ToString() + " (Invalid NickName)", Color.Red, Color.Black);

                                Client.Close();

                                continue;
                            }//if

                            SCMessage scmessageOK = new SCMessage {
                                MessageType = SCMessageType.Connection_OK, X = Width_X, Y = Height_Y
                            };

                            var bytesOK = SCMessage.SerializeJSON_ToBytes(scmessageOK);

                            ClientStream.Write(bytesOK, 0, bytesOK.Length);

                            BytesRead = ClientStream.Read(this.MessageBuffer, 0, this.MessageBuffer.Length);

                            scmessageOK = SCMessage.DeserializeJSON_FromBytes(this.MessageBuffer, 0, BytesRead);

                            if (scmessageOK.MessageType == SCMessageType.Connection_OK)
                            {
                                Program.ConsoleWriteLine(Client.Client.RemoteEndPoint.ToString() + $" Connected ({NickName})", Color.GreenYellow, Color.Black);

                                int Video_Udp_Port = message.UDP_Video_Port;

                                int Audio_Udp_Port = -1;

                                if (this.EnableAudio)
                                {
                                    Audio_Udp_Port = message.UDP_Audio_Port;
                                }//if

                                this.SendAll_Clients(SCMessage.SerializeJSON_ToBytes(new SCMessage {
                                    Message = NickName, MessageType = SCMessageType.ClientConnected_Message
                                }));

                                AddClientInfo(Client, Video_Udp_Port, Audio_Udp_Port, NickName);
                            }//if
                            else
                            {
                                continue;
                            }
                        }//if
                        else
                        {
                            Disconnect(Client);

                            continue;
                        } //else
                    }     //try
                    catch {
                        Disconnect(Client);

                        continue;
                    }//catch

                    Task.Run(() => {
                        try {
                            this.SendAllClientsOnline(Client);

                            int countRead = 0;

                            SCMessage scmessage = null;

                            byte[] clientMessage = new byte[MessageBufferSIZE];

                            while (true)
                            {
                                countRead = ClientStream.Read(clientMessage, 0, clientMessage.Length);

                                scmessage = SCMessage.DeserializeJSON_FromBytes(clientMessage, 0, countRead);

                                if (scmessage.MessageType == SCMessageType.Mouse_Click)
                                {
                                    MouseClick mouseclick = new MouseClick();

                                    mouseclick.Message = scmessage.From;

                                    mouseclick.X = scmessage.X;

                                    mouseclick.Y = scmessage.Y;

                                    MouseClick.DrawMouseClick(mouseclick);
                                }//if
                                else if (scmessage.MessageType == SCMessageType.PublicMessage)
                                {
                                    Program.ConsoleWriteLine($"{scmessage.From} : {scmessage.Message}", Program.Orange, Color.Black);

                                    var sender = this.Clients.FirstOrDefault(c => c.NickName == scmessage.From);

                                    if (sender != null)
                                    {
                                        this.SendAll_Clients(clientMessage, 0, countRead, sender);
                                    }
                                }//else if
                                else if (scmessage.MessageType == SCMessageType.PrivateMessage)
                                {
                                    var toClient = this.Clients.FirstOrDefault(c => c.NickName == scmessage.To);

                                    if (toClient != null)
                                    {
                                        this.SendTCP(clientMessage, 0, countRead, toClient.Client);
                                    }
                                }//else if
                                else if (scmessage.MessageType == SCMessageType.DeleteFileServer)
                                {
                                    var fname = scmessage.Message;

                                    var NickName_ = scmessage.From;

                                    Task.Run(() => {
                                        while (true)
                                        {
                                            try {
                                                if (File.Exists($"{Program.SV_Directory}/{fname}"))
                                                {
                                                    File.Delete($"{Program.SV_Directory}/{fname}");

                                                    return;
                                                } //if
                                            }     //try
                                            catch {
                                            }     //catch

                                            Thread.Sleep(1000);
                                        }//while
                                    });

                                    scmessage = new SCMessage {
                                        MessageType = SCMessageType.FileDeleted, Message = fname
                                    };

                                    var bytes_ = SCMessage.SerializeJSON_ToBytes(scmessage);

                                    var sender = this.Clients.FirstOrDefault(c => c.NickName == NickName_);

                                    if (sender != null)
                                    {
                                        this.SendAll_Clients(bytes_, 0, bytes_.Length, sender);
                                    }
                                }//else if
                                else if (scmessage.MessageType == SCMessageType.SendFile)
                                {
                                    string NickName_ = scmessage.From;

                                    SCMessage cMessage = new SCMessage {
                                        MessageType = SCMessageType.FileTCP_Port, UDP_Video_Port = this.FileSendTCP_Port
                                    };

                                    var bytes__ = SCMessage.SerializeJSON_ToBytes(cMessage);

                                    ClientStream.Write(bytes__, 0, bytes__.Length);

                                    Task.Run(() => {
                                        TcpClient client = null;

                                        try {
                                            if (!Directory.Exists(Program.SV_Directory))
                                            {
                                                Directory.CreateDirectory(Program.SV_Directory);
                                            }//if

                                            client = this.FileSendTCP.AcceptTcpClient();

                                            var NS = client.GetStream();

                                            var fname = $"{DateTime.Now.Ticks}_{scmessage.Message}";

                                            FileStream fileStream = new FileStream($"{Program.SV_Directory}/{fname}", FileMode.Create, FileAccess.Write);

                                            const long SendSize = 999;

                                            byte[] buffer = new byte[SendSize];

                                            byte[] messagebyffer = new byte[4] {
                                                7, 7, 7, 7
                                            };

                                            NS.Write(messagebyffer, 0, messagebyffer.Length);

                                            var fnameBytes = Encoding.UTF8.GetBytes(fname);

                                            NS.Write(fnameBytes, 0, fnameBytes.Length);

                                            while (true)
                                            {
                                                countRead = NS.Read(buffer, 0, buffer.Length);

                                                if (countRead == 9)
                                                {
                                                    bool error = true;

                                                    for (int j = 0; j < 9; j++)
                                                    {
                                                        if (buffer[j] != 7)
                                                        {
                                                            error = false;

                                                            return;
                                                        } //if
                                                    }     //for

                                                    if (error)
                                                    {
                                                        break;
                                                    }

                                                    fileStream.Write(buffer, 0, countRead);

                                                    NS.Write(messagebyffer, 0, messagebyffer.Length);

                                                    fileStream.Close();

                                                    break;
                                                }//if
                                                else if (countRead < SendSize)
                                                {
                                                    fileStream.Write(buffer, 0, countRead);

                                                    NS.Write(messagebyffer, 0, messagebyffer.Length);

                                                    fileStream.Close();

                                                    break;
                                                }//else if
                                                else
                                                {
                                                    fileStream.Write(buffer, 0, countRead);

                                                    NS.Write(messagebyffer, 0, messagebyffer.Length);
                                                } //else
                                            }     //while

                                            SCMessage sCMessage = new SCMessage {
                                                MessageType = SCMessageType.SendFileName, Message = fname
                                            };

                                            var bytes___ = SCMessage.SerializeJSON_ToBytes(sCMessage);

                                            var sender = this.Clients.FirstOrDefault(c => c.NickName == NickName_);

                                            if (sender != null)
                                            {
                                                this.SendAll_Clients(bytes___, 0, bytes___.Length, sender);
                                            }
                                        }//try
                                        catch (Exception ex) {
                                            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        }//catch

                                        if (client != null)
                                        {
                                            client.Close();
                                        }
                                    });
                                }//else if
                                else if (scmessage.MessageType == SCMessageType.SendFileName)
                                {
                                    if (File.Exists($"{Program.SV_Directory}/{scmessage.Message}") == false)
                                    {
                                        scmessage = new SCMessage {
                                            MessageType = SCMessageType.FileNotFound, Message = scmessage.Message
                                        };

                                        var bytes = SCMessage.SerializeJSON_ToBytes(scmessage);

                                        ClientStream.Write(bytes, 0, bytes.Length);

                                        return;
                                    }//if
                                    else
                                    {
                                        SCMessage cMessage = new SCMessage {
                                            MessageType = SCMessageType.SendFile, UDP_Video_Port = this.FileSendTCP_Port
                                        };

                                        var bytes = SCMessage.SerializeJSON_ToBytes(cMessage);

                                        ClientStream.Write(bytes, 0, bytes.Length);
                                    }//else

                                    Task.Run(() => {
                                        TcpClient client = null;

                                        try {
                                            client = this.FileSendTCP.AcceptTcpClient();

                                            var NS = client.GetStream();

                                            var fname = scmessage.Message;

                                            try {
                                                const long SendSize = 999;

                                                byte[] read = new byte[4];

                                                NS.Read(read, 0, read.Length);

                                                FileStream fileStream = new FileStream($"{Program.SV_Directory}/{fname}", FileMode.Open, FileAccess.Read);

                                                FileInfo fileInfo = new FileInfo($"{Program.SV_Directory}/{fname}");

                                                var countFullSend = (int)(fileInfo.Length / SendSize);

                                                var lastBytes = (int)(fileInfo.Length - (countFullSend * SendSize));

                                                int i = 0;

                                                byte[] buffer = new byte[SendSize];

                                                while (i < countFullSend)
                                                {
                                                    fileStream.Read(buffer, 0, buffer.Length);

                                                    NS.Write(buffer, 0, buffer.Length);

                                                    NS.Read(read, 0, read.Length);

                                                    i++;
                                                }//while

                                                if (lastBytes == 0)
                                                {
                                                    ClientStream.Write(new byte[9] {
                                                        7, 7, 7, 7, 7, 7, 7, 7, 7
                                                    }, 0, 9);
                                                }//if
                                                else
                                                {
                                                    fileStream.Read(buffer, 0, lastBytes);

                                                    NS.Write(buffer, 0, lastBytes);

                                                    NS.Read(read, 0, read.Length);

                                                    fileStream.Close();
                                                } //else
                                            }     //try
                                            catch (Exception ex) {
                                                ClientStream.Write(new byte[9] {
                                                    7, 7, 7, 7, 7, 7, 7, 7, 7
                                                }, 0, 9);

                                                MessageBox.Show(ex.Message, "Send File Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                            } //catch
                                        }     //try
                                        catch (Exception ex) {
                                            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        }//catch

                                        if (client != null)
                                        {
                                            client.Close();
                                        }
                                    });
                                } //else if
                            }     //while
                        }         //try
                        catch {
                            Disconnect(Client);

                            return;
                        } //catch
                    });
                }         //while
            }             //try
            catch (Exception ex) {
                //Program.ConsoleWriteLine($"TCP Error: {ex.Message}", Program.Red, Color.Black);
            } //catch
        }     //TCPListen
示例#13
0
        //获取系统信息反馈回调
        private void GetSysMessageResult(ResultModel result)
        {
            if (result.pack.Cmd != Cmd.CMD_MESSAGE)
            {
                return;
            }
            System.Console.WriteLine("GetSysMessageResult:" + result.pack);
            if (result.pack.Content.MessageType == 1)
            {
                SCMessage      message = result.pack.Content.ScMessage;
                IList <string> pars    = message.ParamsList;
                SYSMSG_TYPE    msg     = (SYSMSG_TYPE)message.Cmd;

                switch (msg)
                {
                //上机
                case SYSMSG_TYPE.LOGON:
                    UserUpComputer(pars);
                    break;

                //下机
                case SYSMSG_TYPE.LOGOFF:
                    UserDownComputer(pars);
                    break;

                //更新状态
                case SYSMSG_TYPE.UPSTATUS:
                    UpdateUserStatus(pars);
                    break;

                //更新验证
                case SYSMSG_TYPE.VERIFY:
                    UpdateUserVerifyStatus(pars);
                    break;

                //有呼叫消息
                case SYSMSG_TYPE.CALL:
                    if (this.UpdateMsgNumEvent != null)
                    {
                        this.callMsgNum = pars[0].Equals("") ? 0 : int.Parse(pars[0]);
                        this.UpdateMsgNumEvent();
                    }
                    break;

                //订单信息
                case SYSMSG_TYPE.ORDER:

                    if (this.UpdateMsgNumEvent != null)
                    {
                        this.orderMsgNum = pars[0].Equals("") ? 0 : int.Parse(pars[0]);
                        this.UpdateMsgNumEvent();
                    }
                    break;

                //异常信息
                case SYSMSG_TYPE.EXCEPTION:
                    if (this.UpdateMsgNumEvent != null)
                    {
                        this.exceptionMsgNum = pars[0].Equals("") ? 0 : int.Parse(pars[0]);
                        this.UpdateMsgNumEvent();
                    }
                    break;

                //当日上网人数
                case SYSMSG_TYPE.DAILY_ONLINE_COUNT:
                    if (this.UpdateDailyCountEvent != null)
                    {
                        int num = pars[0].Equals("") ? 0 : int.Parse(pars[0]);
                        this.dailyOnlineCount = num;
                        this.UpdateDailyCountEvent();
                    }

                    break;

                //当日营收金额
                case SYSMSG_TYPE.DAILY_TRADE_AMOUNT:
                    if (this.UpdateDailyCountEvent != null)
                    {
                        int num = pars[0].Equals("") ? 0 : int.Parse(pars[0]);
                        this.dailyTradeAmount = num;
                        this.UpdateDailyCountEvent();
                    }

                    break;

                default:

                    break;
                }
            }
        }